Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

medium-editor

Package Overview
Dependencies
Maintainers
3
Versions
125
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

medium-editor - npm Package Compare versions

Comparing version 4.2.0 to 4.3.0

server.js

2

bower.json
{
"name": "medium-editor",
"version": "4.2.0",
"version": "4.3.0",
"homepage": "http://daviferreira.github.io/medium-editor/",

@@ -5,0 +5,0 @@ "authors": [

@@ -0,1 +1,9 @@

4.3.0 / 2015-04-10
* Add override options for pasteHTML and cleanPaste
* Support overriding of scss theme variables
* Fix for justify button states in IE
* New helpers for manipulating nested objects
* Internal tooling prep for options and defaults
4.2.0 / 2015-04-05

@@ -2,0 +10,0 @@ ==================

@@ -1,2 +0,2 @@

"classList"in document.createElement("_")||!function(a){"use strict";if("Element"in a){var b="classList",c="prototype",d=a.Element[c],e=Object,f=String[c].trim||function(){return this.replace(/^\s+|\s+$/g,"")},g=Array[c].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1},h=function(a,b){this.name=a,this.code=DOMException[a],this.message=b},i=function(a,b){if(""===b)throw new h("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(b))throw new h("INVALID_CHARACTER_ERR","String contains an invalid character");return g.call(a,b)},j=function(a){for(var b=f.call(a.getAttribute("class")||""),c=b?b.split(/\s+/):[],d=0,e=c.length;e>d;d++)this.push(c[d]);this._updateClassName=function(){a.setAttribute("class",this.toString())}},k=j[c]=[],l=function(){return new j(this)};if(h[c]=Error[c],k.item=function(a){return this[a]||null},k.contains=function(a){return a+="",-1!==i(this,a)},k.add=function(){var a,b=arguments,c=0,d=b.length,e=!1;do a=b[c]+"",-1===i(this,a)&&(this.push(a),e=!0);while(++c<d);e&&this._updateClassName()},k.remove=function(){var a,b,c=arguments,d=0,e=c.length,f=!1;do for(a=c[d]+"",b=i(this,a);-1!==b;)this.splice(b,1),f=!0,b=i(this,a);while(++d<e);f&&this._updateClassName()},k.toggle=function(a,b){a+="";var c=this.contains(a),d=c?b!==!0&&"remove":b!==!1&&"add";return d&&this[d](a),b===!0||b===!1?b:!c},k.toString=function(){return this.join(" ")},e.defineProperty){var m={get:l,enumerable:!0,configurable:!0};try{e.defineProperty(d,b,m)}catch(n){-2146823252===n.number&&(m.enumerable=!1,e.defineProperty(d,b,m))}}else e[c].__defineGetter__&&d.__defineGetter__(b,l)}}(self),function(a){"use strict";if(a.URL=a.URL||a.webkitURL,a.Blob&&a.URL)try{return void new Blob}catch(b){}var c=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||function(a){var b=function(a){return Object.prototype.toString.call(a).match(/^\[object\s(.*)\]$/)[1]},c=function(){this.data=[]},d=function(a,b,c){this.data=a,this.size=a.length,this.type=b,this.encoding=c},e=c.prototype,f=d.prototype,g=a.FileReaderSync,h=function(a){this.code=this[this.name=a]},i="NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR".split(" "),j=i.length,k=a.URL||a.webkitURL||a,l=k.createObjectURL,m=k.revokeObjectURL,n=k,o=a.btoa,p=a.atob,q=a.ArrayBuffer,r=a.Uint8Array,s=/^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/;for(d.fake=f.fake=!0;j--;)h.prototype[i[j]]=j+1;return k.createObjectURL||(n=a.URL=function(a){var b,c=document.createElementNS("http://www.w3.org/1999/xhtml","a");return c.href=a,"origin"in c||("data:"===c.protocol.toLowerCase()?c.origin=null:(b=a.match(s),c.origin=b&&b[1])),c}),n.createObjectURL=function(a){var b,c=a.type;return null===c&&(c="application/octet-stream"),a instanceof d?(b="data:"+c,"base64"===a.encoding?b+";base64,"+a.data:"URI"===a.encoding?b+","+decodeURIComponent(a.data):o?b+";base64,"+o(a.data):b+","+encodeURIComponent(a.data)):l?l.call(k,a):void 0},n.revokeObjectURL=function(a){"data:"!==a.substring(0,5)&&m&&m.call(k,a)},e.append=function(a){var c=this.data;if(r&&(a instanceof q||a instanceof r)){for(var e="",f=new r(a),i=0,j=f.length;j>i;i++)e+=String.fromCharCode(f[i]);c.push(e)}else if("Blob"===b(a)||"File"===b(a)){if(!g)throw new h("NOT_READABLE_ERR");var k=new g;c.push(k.readAsBinaryString(a))}else a instanceof d?"base64"===a.encoding&&p?c.push(p(a.data)):"URI"===a.encoding?c.push(decodeURIComponent(a.data)):"raw"===a.encoding&&c.push(a.data):("string"!=typeof a&&(a+=""),c.push(unescape(encodeURIComponent(a))))},e.getBlob=function(a){return arguments.length||(a=null),new d(this.data.join(""),a,"raw")},e.toString=function(){return"[object BlobBuilder]"},f.slice=function(a,b,c){var e=arguments.length;return 3>e&&(c=null),new d(this.data.slice(a,e>1?b:this.data.length),c,this.encoding)},f.toString=function(){return"[object Blob]"},f.close=function(){this.size=0,delete this.data},c}(a);a.Blob=function(a,b){var d=b?b.type||"":"",e=new c;if(a)for(var f=0,g=a.length;g>f;f++)e.append(Uint8Array&&a[f]instanceof Uint8Array?a[f].buffer:a[f]);var h=e.getBlob(d);return!h.slice&&h.webkitSlice&&(h.slice=h.webkitSlice),h};var d=Object.getPrototypeOf||function(a){return a.__proto__};a.Blob.prototype=d(new a.Blob)}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content||this),function(a,b){"use strict";"object"==typeof module?module.exports=b:"function"==typeof define&&define.amd?define(function(){return b}):a.MediumEditor=b}(this,function(){"use strict";function a(a,b){return this.init(a,b)}var b;!function(a){function c(a,b,c){var d;a=a||{};for(d in b)b.hasOwnProperty(d)&&(c||a.hasOwnProperty(d)===!1)&&(a[d]=b[d]);return a}b={isIE:"Microsoft Internet Explorer"===navigator.appName||"Netscape"===navigator.appName&&null!==new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent),keyCode:{BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,DELETE:46},parentElements:["p","h1","h2","h3","h4","h5","h6","blockquote","pre"],defaults:function(a,b){return c(a,b)},derives:function(a,b){function d(){}var e=b.prototype;return d.prototype=a.prototype,b.prototype=new d,b.prototype.constructor=a,b.prototype=c(b.prototype,e),b},findAdjacentTextNodeWithContent:function(a,b,c){var d,e=!1,f=c.createNodeIterator(a,NodeFilter.SHOW_TEXT,null,!1);for(d=f.nextNode();d;){if(d===b)e=!0;else if(e&&3===d.nodeType&&d.nodeValue&&d.nodeValue.trim().length>0)break;d=f.nextNode()}return d},isDescendant:function(a,b){if(!a||!b)return!1;for(var c=b.parentNode;null!==c;){if(c===a)return!0;c=c.parentNode}return!1},isElement:function(a){return!(!a||1!==a.nodeType)},now:Date.now,throttle:function(a,c){var d,e,f,g=50,h=null,i=0,j=function(){i=b.now(),h=null,f=a.apply(d,e),h||(d=e=null)};return c||0===c||(c=g),function(){var g=b.now(),k=c-(g-i);return d=this,e=arguments,0>=k||k>c?(h&&(clearTimeout(h),h=null),i=g,f=a.apply(d,e),h||(d=e=null)):h||(h=setTimeout(j,k)),f}},traverseUp:function(a,b){do{if(1===a.nodeType){if(b(a))return a;if(a.getAttribute("data-medium-element"))return!1}a=a.parentNode}while(a);return!1},htmlEntities:function(a){return String(a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},insertHTMLCommand:function(a,b){var c,d,e,f,g,h,i;if(a.queryCommandSupported("insertHTML"))try{return a.execCommand("insertHTML",!1,b)}catch(j){}if(c=a.defaultView.getSelection(),c.getRangeAt&&c.rangeCount){if(d=c.getRangeAt(0),i=d.commonAncestorContainer,3===i.nodeType&&i.nodeValue===d.toString()||3!==i.nodeType&&i.innerHTML===d.toString()){for(;i.parentNode&&1===i.parentNode.childNodes.length&&!i.parentNode.getAttribute("data-medium-element");)i=i.parentNode;d.selectNode(i)}for(d.deleteContents(),e=a.createElement("div"),e.innerHTML=b,f=a.createDocumentFragment();e.firstChild;)g=e.firstChild,h=f.appendChild(g);d.insertNode(f),h&&(d=d.cloneRange(),d.setStartAfter(h),d.collapse(!0),c.removeAllRanges(),c.addRange(d))}},getSelectionRange:function(a){var b=a.getSelection();return 0===b.rangeCount?null:b.getRangeAt(0)},getSelectionStart:function(a){var b=a.getSelection().anchorNode,c=b&&3===b.nodeType?b.parentNode:b;return c},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}},execFormatBlock:function(a,b){var c=this.getSelectionData(this.getSelectionStart(a));if("blockquote"===b&&c.el&&"blockquote"===c.el.parentNode.tagName.toLowerCase())return a.execCommand("outdent",!1,null);if(c.tagName===b&&(b="p"),this.isIE){if("blockquote"===b)return a.execCommand("indent",!1,b);b="<"+b+">"}return a.execCommand("formatBlock",!1,b)},setTargetBlank:function(a){var b;if("a"===a.tagName.toLowerCase())a.target="_blank";else for(a=a.getElementsByTagName("a"),b=0;b<a.length;b+=1)a[b].target="_blank"},addClassToAnchors:function(a,b){var c,d,e=b.split(" ");if("a"===a.tagName.toLowerCase())for(d=0;d<e.length;d+=1)a.classList.add(e[d]);else for(a=a.getElementsByTagName("a"),c=0;c<a.length;c+=1)for(d=0;d<e.length;d+=1)a[c].classList.add(e[d])},isListItem:function(a){if(!a)return!1;if("li"===a.tagName.toLowerCase())return!0;for(var b=a.parentNode,c=b.tagName.toLowerCase();-1===this.parentElements.indexOf(c)&&"div"!==c;){if("li"===c)return!0;if(b=b.parentNode,!b||!b.tagName)return!1;c=b.tagName.toLowerCase()}return!1},cleanListDOM:function(a){if("li"===a.tagName.toLowerCase()){var b=a.parentElement;"p"===b.parentElement.tagName.toLowerCase()&&this.unwrapElement(b.parentElement)}},unwrapElement:function(a){var b,c=a.parentNode,d=a.firstChild;do b=d.nextSibling,c.insertBefore(d,a),d=b;while(d);c.removeChild(a)},deprecatedMethod:function(b,c,d){void 0!==a.console&&console.warn(b+" is deprecated and will be removed, please use "+c+" instead"),"function"==typeof this[c]&&this[c].apply(this,d)},cleanupAttrs:function(a,b){b.forEach(function(b){a.removeAttribute(b)})},cleanupTags:function(a,b){b.forEach(function(b){a.tagName.toLowerCase()===b&&a.parentNode.removeChild(a)})}}}(window);var c;!function(){c={findMatchingSelectionParent:function(a,c){var d,e,f=c.getSelection();return 0===f.rangeCount?!1:(d=f.getRangeAt(0),e=d.commonAncestorContainer,b.traverseUp(e,a))},getSelectionElement:function(a){return this.findMatchingSelectionParent(function(a){return a.getAttribute("data-medium-element")},a)},selectionInContentEditableFalse:function(a){return this.findMatchingSelectionParent(function(a){return a&&"#text"!==a.nodeName&&"false"===a.getAttribute("contenteditable")},a)},getSelectionHtml:function(){var a,b,c,d="",e=this.options.contentWindow.getSelection();if(e.rangeCount){for(c=this.options.ownerDocument.createElement("div"),a=0,b=e.rangeCount;b>a;a+=1)c.appendChild(e.getRangeAt(a).cloneContents());d=c.innerHTML}return d},getCaretOffsets:function(a,b){var c,d;return b||(b=window.getSelection().getRangeAt(0)),c=b.cloneRange(),d=b.cloneRange(),c.selectNodeContents(a),c.setEnd(b.endContainer,b.endOffset),d.selectNodeContents(a),d.setStart(b.endContainer,b.endOffset),{left:c.toString().length,right:d.toString().length}},rangeSelectsSingleNode:function(a){var b=a.startContainer;return b===a.endContainer&&b.hasChildNodes()&&a.endOffset===a.startOffset+1},getSelectedParentElement:function(a){var b=null;return b=this.rangeSelectsSingleNode(a)&&3!==a.startContainer.childNodes[a.startOffset].nodeType?a.startContainer.childNodes[a.startOffset]:3===a.startContainer.nodeType?a.startContainer.parentNode:a.startContainer}}}();var d;!function(){d=function(a){this.base=a,this.options=this.base.options,this.events=[],this.customEvents={},this.listeners={}},d.prototype={attachDOMEvent:function(a,b,c,d){a.addEventListener(b,c,d),this.events.push([a,b,c,d])},detachDOMEvent: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},detachAllDOMEvents:function(){for(var a=this.events.pop();a;)a[0].removeEventListener(a[1],a[2],a[3]),a=this.events.pop()},attachCustomEvent:function(a,b){this.setupListener(a),this.listeners[a]&&(this.customEvents[a]||(this.customEvents[a]=[]),this.customEvents[a].push(b))},triggerCustomEvent:function(a,b,c){this.customEvents[a]&&this.customEvents[a].forEach(function(a){a(b,c)})},setupListener:function(a){if(!this.listeners[a])switch(a){case"externalInteraction":this.attachDOMEvent(this.options.ownerDocument.body,"click",this.handleInteraction.bind(this),!0),this.attachDOMEvent(this.options.ownerDocument.body,"focus",this.handleInteraction.bind(this),!0),this.listeners[a]=!0;break;case"editableClick":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"click",this.handleClick.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableBlur":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"blur",this.handleBlur.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableKeypress":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"keypress",this.handleKeypress.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableKeydown":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"keydown",this.handleKeydown.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableKeydownEnter":this.setupListener("editableKeydown"),this.listeners[a]=!0;break;case"editableKeydownTab":this.setupListener("editableKeydown"),this.listeners[a]=!0;break;case"editableKeydownDelete":this.setupListener("editableKeydown"),this.listeners[a]=!0;break;case"editableMouseover":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"mouseover",this.handleMouseover.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableDrag":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"dragover",this.handleDragging.bind(this)),this.attachDOMEvent(a,"dragleave",this.handleDragging.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableDrop":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"drop",this.handleDrop.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editablePaste":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"paste",this.handlePaste.bind(this))}.bind(this)),this.listeners[a]=!0}},handleInteraction:function(a){var d,e=!1,f=this.options.contentWindow.getSelection(),g=this.base.toolbar?this.base.toolbar.getToolbarElement():null,h=this.base.getExtensionByName("anchor-preview"),i=h&&h.getPreviewElement?h.getPreviewElement():null,j=f.isCollapsed?null:c.getSelectedParentElement(f.getRangeAt(0));for(d=0;d<this.base.elements.length;d+=1)if(this.base.elements[d]===a.target||b.isDescendant(this.base.elements[d],a.target)||b.isDescendant(this.base.elements[d],j)){e=!0;break}e||g&&(g===a.target||b.isDescendant(g,a.target))||i&&(i===a.target||b.isDescendant(i,a.target))||this.triggerCustomEvent("externalInteraction",a)},handleClick:function(a){this.triggerCustomEvent("editableClick",a,a.currentTarget)},handleBlur:function(a){this.triggerCustomEvent("editableBlur",a,a.currentTarget)},handleKeypress:function(a){this.triggerCustomEvent("editableKeypress",a,a.currentTarget)},handleMouseover:function(a){this.triggerCustomEvent("editableMouseover",a,a.currentTarget)},handleDragging:function(a){this.triggerCustomEvent("editableDrag",a,a.currentTarget)},handleDrop:function(a){this.triggerCustomEvent("editableDrop",a,a.currentTarget)},handlePaste:function(a){this.triggerCustomEvent("editablePaste",a,a.currentTarget)},handleKeydown:function(a){switch(this.triggerCustomEvent("editableKeydown",a,a.currentTarget),a.which){case b.keyCode.ENTER:this.triggerCustomEvent("editableKeydownEnter",a,a.currentTarget);break;case b.keyCode.TAB:this.triggerCustomEvent("editableKeydownTab",a,a.currentTarget);break;case b.keyCode.DELETE:case b.keyCode.BACKSPACE:this.triggerCustomEvent("editableKeydownDelete",a,a.currentTarget)}}}}();var e,f;!function(){f={bold:{name:"bold",action:"bold",aria:"bold",tagNames:["b","strong"],style:{prop:"font-weight",value:"700|bold"},useQueryState:!0,contentDefault:"<b>B</b>",contentFA:'<i class="fa fa-bold"></i>',key:"b"},italic:{name:"italic",action:"italic",aria:"italic",tagNames:["i","em"],style:{prop:"font-style",value:"italic"},useQueryState:!0,contentDefault:"<b><i>I</i></b>",contentFA:'<i class="fa fa-italic"></i>',key:"i"},underline:{name:"underline",action:"underline",aria:"underline",tagNames:["u"],style:{prop:"text-decoration",value:"underline"},useQueryState:!0,contentDefault:"<b><u>U</u></b>",contentFA:'<i class="fa fa-underline"></i>',key:"u"},strikethrough:{name:"strikethrough",action:"strikethrough",aria:"strike through",tagNames:["strike"],style:{prop:"text-decoration",value:"line-through"},useQueryState:!0,contentDefault:"<s>A</s>",contentFA:'<i class="fa fa-strikethrough"></i>'},superscript:{name:"superscript",action:"superscript",aria:"superscript",tagNames:["sup"],contentDefault:"<b>x<sup>1</sup></b>",contentFA:'<i class="fa fa-superscript"></i>'},subscript:{name:"subscript",action:"subscript",aria:"subscript",tagNames:["sub"],contentDefault:"<b>x<sub>1</sub></b>",contentFA:'<i class="fa fa-subscript"></i>'},image:{name:"image",action:"image",aria:"image",tagNames:["img"],contentDefault:"<b>image</b>",contentFA:'<i class="fa fa-picture-o"></i>'},quote:{name:"quote",action:"append-blockquote",aria:"blockquote",tagNames:["blockquote"],contentDefault:"<b>&ldquo;</b>",contentFA:'<i class="fa fa-quote-right"></i>'},orderedlist:{name:"orderedlist",action:"insertorderedlist",aria:"ordered list",tagNames:["ol"],useQueryState:!0,contentDefault:"<b>1.</b>",contentFA:'<i class="fa fa-list-ol"></i>'},unorderedlist:{name:"unorderedlist",action:"insertunorderedlist",aria:"unordered list",tagNames:["ul"],useQueryState:!0,contentDefault:"<b>&bull;</b>",contentFA:'<i class="fa fa-list-ul"></i>'},pre:{name:"pre",action:"append-pre",aria:"preformatted text",tagNames:["pre"],contentDefault:"<b>0101</b>",contentFA:'<i class="fa fa-code fa-lg"></i>'},indent:{name:"indent",action:"indent",aria:"indent",tagNames:[],contentDefault:"<b>&rarr;</b>",contentFA:'<i class="fa fa-indent"></i>'},outdent:{name:"outdent",action:"outdent",aria:"outdent",tagNames:[],contentDefault:"<b>&larr;</b>",contentFA:'<i class="fa fa-outdent"></i>'},justifyCenter:{name:"justifyCenter",action:"justifyCenter",aria:"center justify",tagNames:[],style:{prop:"text-align",value:"center"},useQueryState:!0,contentDefault:"<b>C</b>",contentFA:'<i class="fa fa-align-center"></i>'},justifyFull:{name:"justifyFull",action:"justifyFull",aria:"full justify",tagNames:[],style:{prop:"text-align",value:"justify"},useQueryState:!0,contentDefault:"<b>J</b>",contentFA:'<i class="fa fa-align-justify"></i>'},justifyLeft:{name:"justifyLeft",action:"justifyLeft",aria:"left justify",tagNames:[],style:{prop:"text-align",value:"left"},useQueryState:!0,contentDefault:"<b>L</b>",contentFA:'<i class="fa fa-align-left"></i>'},justifyRight:{name:"justifyRight",action:"justifyRight",aria:"right justify",tagNames:[],style:{prop:"text-align",value:"right"},useQueryState:!0,contentDefault:"<b>R</b>",contentFA:'<i class="fa fa-align-right"></i>'},header1:{name:"header1",action:function(a){return"append-"+a.firstHeader},aria:function(a){return a.firstHeader},tagNames:function(a){return[a.firstHeader]},contentDefault:"<b>H1</b>"},header2:{name:"header2",action:function(a){return"append-"+a.secondHeader},aria:function(a){return a.secondHeader},tagNames:function(a){return[a.secondHeader]},contentDefault:"<b>H2</b>"},removeFormat:{name:"removeFormat",aria:"remove formatting",action:"removeFormat",contentDefault:"<b>X</b>",contentFA:'<i class="fa fa-eraser"></i>'}},e=function(a,b){this.options=a,this.name=a.name,this.init(b)},e.prototype={init:function(a){this.base=a,this.button=this.createButton(),this.base.on(this.button,"click",this.handleClick.bind(this)),this.options.key&&this.base.subscribe("editableKeydown",this.handleKeydown.bind(this))},getButton:function(){return this.button},getAction:function(){return"function"==typeof this.options.action?this.options.action(this.base.options):this.options.action},getAria:function(){return"function"==typeof this.options.aria?this.options.aria(this.base.options):this.options.aria},getTagNames:function(){return"function"==typeof this.options.tagNames?this.options.tagNames(this.base.options):this.options.tagNames},createButton:function(){var a=this.base.options.ownerDocument.createElement("button"),b=this.options.contentDefault;return a.classList.add("medium-editor-action"),a.classList.add("medium-editor-action-"+this.name),a.setAttribute("data-action",this.getAction()),a.setAttribute("aria-label",this.getAria()),this.base.options.buttonLabels&&("fontawesome"===this.base.options.buttonLabels&&this.options.contentFA?b=this.options.contentFA:"object"==typeof this.base.options.buttonLabels&&this.base.options.buttonLabels[this.name]&&(b=this.base.options.buttonLabels[this.options.name])),a.innerHTML=b,a},handleKeydown:function(a){var b,c;(a.ctrlKey||a.metaKey)&&(b=String.fromCharCode(a.which||a.keyCode).toLowerCase(),this.options.key===b&&(a.preventDefault(),a.stopPropagation(),c=this.getAction(),c&&this.base.execAction(c)))},handleClick:function(a){a.preventDefault(),a.stopPropagation();var b=this.getAction();b&&this.base.execAction(b)},isActive:function(){return this.button.classList.contains(this.base.options.activeButtonClass)},setInactive:function(){this.button.classList.remove(this.base.options.activeButtonClass),delete this.knownState},setActive:function(){this.button.classList.add(this.base.options.activeButtonClass),delete this.knownState},queryCommandState:function(){var a=null;return this.options.useQueryState&&(a=this.base.queryCommandState(this.getAction())),a},isAlreadyApplied:function(a){var b,c,d=!1,e=this.getTagNames();return this.knownState===!1||this.knownState===!0?this.knownState:(e&&e.length>0&&a.tagName&&(d=-1!==e.indexOf(a.tagName.toLowerCase())),!d&&this.options.style&&(b=this.options.style.value.split("|"),c=this.base.options.contentWindow.getComputedStyle(a,null).getPropertyValue(this.options.style.prop),b.forEach(function(a){this.knownState||(d=-1!==c.indexOf(a),(d||"text-decoration"!==this.options.style.prop)&&(this.knownState=d))}.bind(this))),d)}}}();var g;!function(){function a(){return[[new RegExp(/<[^>]*docs-internal-guid[^>]*>/gi),""],[new RegExp(/<\/b>(<br[^>]*>)?$/gi),""],[new RegExp(/<span class="Apple-converted-space">\s+<\/span>/g)," "],[new RegExp(/<br class="Apple-interchange-newline">/g),"<br>"],[new RegExp(/<span[^>]*(font-style:italic;font-weight:bold|font-weight:bold;font-style:italic)[^>]*>/gi),'<span class="replace-with italic bold">'],[new RegExp(/<span[^>]*font-style:italic[^>]*>/gi),'<span class="replace-with italic">'],[new RegExp(/<span[^>]*font-weight:bold[^>]*>/gi),'<span class="replace-with bold">'],[new RegExp(/&lt;(\/?)(i|b|a)&gt;/gi),"<$1$2>"],[new RegExp(/&lt;a\s+href=(&quot;|&rdquo;|&ldquo;|“|”)([^&]+)(&quot;|&rdquo;|&ldquo;|“|”)&gt;/gi),'<a href="$2">'],[new RegExp(/<\/p>\n+/gi),"</p>"],[new RegExp(/\n+<p/gi),"<p"],[new RegExp(/<\/?o:[a-z]*>/gi),""]]}g=function(a){this.base=a,this.options=this.base.options,(this.options.forcePlainText||this.options.cleanPastedHTML)&&this.base.subscribe("editablePaste",this.handlePaste.bind(this))},g.prototype={handlePaste:function(a,c){var d,e,f="",g="text/html",h="text/plain";if(this.options.contentWindow.clipboardData&&void 0===a.clipboardData&&(a.clipboardData=this.options.contentWindow.clipboardData,g="Text",h="Text"),a.clipboardData&&a.clipboardData.getData&&!a.defaultPrevented){if(a.preventDefault(),this.options.cleanPastedHTML&&a.clipboardData.getData(g))return this.cleanPaste(a.clipboardData.getData(g));if(this.options.disableReturn||c.getAttribute("data-disable-return"))f=b.htmlEntities(a.clipboardData.getData(h)),b.insertHTMLCommand(this.options.ownerDocument,f);else{for(d=a.clipboardData.getData(h).split(/[\r\n]/g),e=0;e<d.length;e+=1)""!==d[e]&&(f+="<p>"+b.htmlEntities(d[e])+"</p>");b.insertHTMLCommand(this.options.ownerDocument,f)}}},cleanPaste:function(d){var e,f,g,h=c.getSelectionElement(this.options.contentWindow),i=/<p|<br|<div/.test(d),j=a();for(e=0;e<j.length;e+=1)d=d.replace(j[e][0],j[e][1]);if(i){f=d.split("<br><br>"),this.pasteHTML("<p>"+f.join("</p><p>")+"</p>");try{this.options.ownerDocument.execCommand("insertText",!1,"\n")}catch(k){}for(f=h.querySelectorAll("a,p,div,br"),e=0;e<f.length;e+=1)switch(g=f[e],g.innerHTML=g.innerHTML.replace(/\n/gi," "),g.tagName.toLowerCase()){case"a":this.options.targetBlank&&b.setTargetBlank(g);break;case"p":case"div":this.filterCommonBlocks(g);break;case"br":this.filterLineBreak(g)}}else this.pasteHTML(d)},pasteHTML:function(a,c){c=b.defaults(c,{cleanAttrs:["class","style","dir"],cleanTags:["meta"]});var d,e,f,g,h=this.options.ownerDocument.createDocumentFragment();for(h.appendChild(this.options.ownerDocument.createElement("body")),g=h.querySelector("body"),g.innerHTML=a,this.cleanupSpans(g),d=g.querySelectorAll("*"),f=0;f<d.length;f+=1)e=d[f],b.cleanupAttrs(e,c.cleanAttrs),b.cleanupTags(e,c.cleanTags);b.insertHTMLCommand(this.options.ownerDocument,g.innerHTML.replace(/&nbsp;/g," "))},isCommonBlock:function(a){return a&&("p"===a.tagName.toLowerCase()||"div"===a.tagName.toLowerCase())},filterCommonBlocks:function(a){/^\s*$/.test(a.textContent)&&a.parentNode&&a.parentNode.removeChild(a)},filterLineBreak:function(a){this.isCommonBlock(a.previousElementSibling)?this.removeWithParent(a):!this.isCommonBlock(a.parentNode)||a.parentNode.firstChild!==a&&a.parentNode.lastChild!==a?a.parentNode&&1===a.parentNode.childElementCount&&""===a.parentNode.textContent&&this.removeWithParent(a):this.removeWithParent(a)},removeWithParent:function(a){a&&a.parentNode&&(a.parentNode.parentNode&&1===a.parentNode.childElementCount?a.parentNode.parentNode.removeChild(a.parentNode):a.parentNode.removeChild(a))},cleanupSpans:function(a){var c,d,e,f=a.querySelectorAll(".replace-with"),g=function(a){return a&&"#text"!==a.nodeName&&"false"===a.getAttribute("contenteditable")};for(c=0;c<f.length;c+=1)d=f[c],e=this.options.ownerDocument.createElement(d.classList.contains("bold")?"b":"i"),e.innerHTML=d.classList.contains("bold")&&d.classList.contains("italic")?"<i>"+d.innerHTML+"</i>":d.innerHTML,d.parentNode.replaceChild(e,d);for(f=a.querySelectorAll("span"),c=0;c<f.length;c+=1){if(d=f[c],b.traverseUp(d,g))return!1;/^\s*$/.test()?d.parentNode.removeChild(d):d.parentNode.replaceChild(this.options.ownerDocument.createTextNode(d.textContent),d)}}}}();var h;!function(){function a(){this.parent=!0,this.options={name:"anchor",action:"createLink",aria:"link",tagNames:["a"],contentDefault:"<b>#</b>",contentFA:'<i class="fa fa-link"></i>'},this.name="anchor",this.hasForm=!0}a.prototype={formSaveLabel:"&#10003;",formCloseLabel:"&times;",handleClick:function(a){a.preventDefault(),a.stopPropagation();var d=c.getSelectedParentElement(b.getSelectionRange(this.base.options.ownerDocument));return d.tagName&&"a"===d.tagName.toLowerCase()?this.base.execAction("unlink"):(this.isDisplayed()||this.showForm(),!1)},getForm:function(){return this.form||(this.form=this.createForm()),this.form},getTemplate:function(){var a=['<input type="text" class="medium-editor-toolbar-input" placeholder="',this.base.options.anchorInputPlaceholder,'">'];return a.push('<a href="#" class="medium-editor-toolbar-save">',"fontawesome"===this.base.options.buttonLabels?'<i class="fa fa-check"></i>':this.formSaveLabel,"</a>"),a.push('<a href="#" class="medium-editor-toolbar-close">',"fontawesome"===this.base.options.buttonLabels?'<i class="fa fa-times"></i>':this.formCloseLabel,"</a>"),this.base.options.anchorTarget&&a.push('<input type="checkbox" class="medium-editor-toolbar-anchor-target">',"<label>",this.base.options.anchorInputCheckboxLabel,"</label>"),this.base.options.anchorButton&&a.push('<input type="checkbox" class="medium-editor-toolbar-anchor-button">',"<label>Button</label>"),a.join("")},isDisplayed:function(){return"block"===this.getForm().style.display},hideForm:function(){this.getForm().style.display="none",this.getInput().value=""},showForm:function(a){var b=this.getInput();this.base.saveSelection(),this.base.hideToolbarDefaultActions(),this.getForm().style.display="block",this.base.setToolbarPosition(),b.value=a||"",b.focus()},deactivate:function(){return this.form?(this.form.parentNode&&this.form.parentNode.removeChild(this.form),void delete this.form):!1},getFormOpts:function(){var a=this.getForm().querySelector(".medium-editor-toolbar-anchor-target"),b=this.getForm().querySelector(".medium-editor-toolbar-anchor-button"),c={url:this.getInput().value};return this.base.options.checkLinkFormat&&(c.url=this.checkLinkFormat(c.url)),c.target=a&&a.checked?"_blank":"_self",b&&b.checked&&(c.buttonClass=this.base.options.anchorButtonClass),c},doFormSave:function(){var a=this.getFormOpts();this.completeFormSave(a)},completeFormSave:function(a){this.base.restoreSelection(),this.base.createLink(a),this.base.checkSelection()},checkLinkFormat:function(a){var b=/^(https?|ftps?|rtmpt?):\/\/|mailto:/;return(b.test(a)?"":"http://")+a},doFormCancel:function(){this.base.restoreSelection(),this.base.checkSelection()},attachFormEvents:function(a){var b=a.querySelector(".medium-editor-toolbar-close"),c=a.querySelector(".medium-editor-toolbar-save"),d=a.querySelector(".medium-editor-toolbar-input");this.base.on(a,"click",this.handleFormClick.bind(this)),this.base.on(d,"keyup",this.handleTextboxKeyup.bind(this)),this.base.on(b,"click",this.handleCloseClick.bind(this)),this.base.on(c,"click",this.handleSaveClick.bind(this),!0)},createForm:function(){var a=this.base.options.ownerDocument,b=a.createElement("div");return b.className="medium-editor-toolbar-form",b.id="medium-editor-toolbar-form-anchor-"+this.base.id,b.innerHTML=this.getTemplate(),this.attachFormEvents(b),b},getInput:function(){return this.getForm().querySelector("input.medium-editor-toolbar-input")},handleTextboxKeyup:function(a){return a.keyCode===b.keyCode.ENTER?(a.preventDefault(),void this.doFormSave()):void(a.keyCode===b.keyCode.ESCAPE&&(a.preventDefault(),this.doFormCancel()))},handleFormClick:function(a){a.stopPropagation()},handleSaveClick:function(a){a.preventDefault(),this.doFormSave()},handleCloseClick:function(a){a.preventDefault(),this.doFormCancel()}},h=b.derives(e,a)}();var i;!function(){i=function(){this.parent=!0,this.name="anchor-preview"},i.prototype={previewValueSelector:"i",init:function(a){this.base=a,this.anchorPreview=this.createPreview(),this.base.options.elementsContainer.appendChild(this.anchorPreview),this.attachToEditables()},getPreviewElement:function(){return this.anchorPreview},createPreview:function(){var a=this.base.options.ownerDocument.createElement("div");return a.id="medium-editor-anchor-preview-"+this.base.id,a.className="medium-editor-anchor-preview",a.innerHTML=this.getTemplate(),this.base.on(a,"click",this.handleClick.bind(this)),a},getTemplate:function(){return'<div class="medium-editor-toolbar-anchor-preview" id="medium-editor-toolbar-anchor-preview"> <i class="medium-editor-toolbar-anchor-preview-inner"></i></div>'},deactivate:function(){this.anchorPreview&&(this.anchorPreview.parentNode&&this.anchorPreview.parentNode.removeChild(this.anchorPreview),delete this.anchorPreview)},hidePreview:function(){this.anchorPreview.classList.remove("medium-editor-anchor-preview-active"),this.activeAnchor=null},showPreview:function(a){return this.anchorPreview.classList.contains("medium-editor-anchor-preview-active")||a.getAttribute("data-disable-preview")?!0:(this.previewValueSelector&&(this.anchorPreview.querySelector(this.previewValueSelector).textContent=a.attributes.href.value),this.anchorPreview.classList.add("medium-toolbar-arrow-over"),this.anchorPreview.classList.remove("medium-toolbar-arrow-under"),this.anchorPreview.classList.contains("medium-editor-anchor-preview-active")||this.anchorPreview.classList.add("medium-editor-anchor-preview-active"),this.activeAnchor=a,this.positionPreview(),this.attachPreviewHandlers(),this)},positionPreview:function(){var a,b,c=40,d=this.activeAnchor.getBoundingClientRect(),e=(d.left+d.right)/2;a=this.anchorPreview.offsetWidth/2,b=this.base.options.diffLeft-a,this.anchorPreview.style.top=Math.round(c+d.bottom-this.base.options.diffTop+this.base.options.contentWindow.pageYOffset-this.anchorPreview.offsetHeight)+"px",this.anchorPreview.style.left=a>e?b+a+"px":this.base.options.contentWindow.innerWidth-e<a?this.base.options.contentWindow.innerWidth+b-a+"px":b+e+"px"},attachToEditables:function(){this.base.subscribe("editableMouseover",this.handleEditableMouseover.bind(this))},handleClick:function(){var a,b,c=this.base.getExtensionByName("anchor"),d=this.activeAnchor;c&&d&&(a=this.base.options.ownerDocument.createRange(),a.selectNodeContents(this.activeAnchor),b=this.base.options.contentWindow.getSelection(),b.removeAllRanges(),b.addRange(a),this.base.delay(function(){d&&(c.showForm(d.attributes.href.value),d=null)
}.bind(this))),this.hidePreview()},handleAnchorMouseout:function(){this.anchorToPreview=null,this.base.off(this.activeAnchor,"mouseout",this.instance_handleAnchorMouseout),this.instance_handleAnchorMouseout=null},handleEditableMouseover:function(a){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.base.toolbar&&this.base.toolbar.isDisplayed())return!0;this.activeAnchor&&this.activeAnchor!==a.target&&this.detachPreviewHandlers(),this.anchorToPreview=a.target,this.instance_handleAnchorMouseout=this.handleAnchorMouseout.bind(this),this.base.on(this.anchorToPreview,"mouseout",this.instance_handleAnchorMouseout),this.base.delay(function(){this.anchorToPreview&&this.showPreview(this.anchorToPreview)}.bind(this))}},handlePreviewMouseover:function(){this.lastOver=(new Date).getTime(),this.hovering=!0},handlePreviewMouseout:function(a){a.relatedTarget&&/anchor-preview/.test(a.relatedTarget.className)||(this.hovering=!1)},updatePreview:function(){if(this.hovering)return!0;var a=(new Date).getTime()-this.lastOver;a>this.base.options.anchorPreviewHideDelay&&this.detachPreviewHandlers()},detachPreviewHandlers:function(){clearInterval(this.interval_timer),this.instance_handlePreviewMouseover&&(this.base.off(this.anchorPreview,"mouseover",this.instance_handlePreviewMouseover),this.base.off(this.anchorPreview,"mouseout",this.instance_handlePreviewMouseout),this.activeAnchor&&(this.base.off(this.activeAnchor,"mouseover",this.instance_handlePreviewMouseover),this.base.off(this.activeAnchor,"mouseout",this.instance_handlePreviewMouseout))),this.hidePreview(),this.hovering=this.instance_handlePreviewMouseover=this.instance_handlePreviewMouseout=null},attachPreviewHandlers:function(){this.lastOver=(new Date).getTime(),this.hovering=!0,this.instance_handlePreviewMouseover=this.handlePreviewMouseover.bind(this),this.instance_handlePreviewMouseout=this.handlePreviewMouseout.bind(this),this.interval_timer=setInterval(this.updatePreview.bind(this),200),this.base.on(this.anchorPreview,"mouseover",this.instance_handlePreviewMouseover),this.base.on(this.anchorPreview,"mouseout",this.instance_handlePreviewMouseout),this.base.on(this.activeAnchor,"mouseover",this.instance_handlePreviewMouseover),this.base.on(this.activeAnchor,"mouseout",this.instance_handlePreviewMouseout)}}}();var j;!function(){j=function(a){this.base=a,this.options=a.options,this.initThrottledMethods()},j.prototype={createToolbar:function(){var a=this.base.options.ownerDocument.createElement("div");return a.id="medium-editor-toolbar-"+this.base.id,a.className="medium-editor-toolbar",a.className+=this.options.staticToolbar?" static-toolbar":" stalker-toolbar",a.appendChild(this.createToolbarButtons()),this.base.commands.forEach(function(b){b.hasForm&&a.appendChild(b.getForm())}),this.attachEventHandlers(),this.base.subscribe("externalInteraction",this.handleBlur.bind(this)),a},createToolbarButtons:function(){var a,c,d,e=this.base.options.ownerDocument.createElement("ul");return e.id="medium-editor-toolbar-actions"+this.base.id,e.className="medium-editor-toolbar-actions clearfix",e.style.display="block",this.base.commands.forEach(function(d){"function"==typeof d.getButton&&(c=d.getButton(this.base),a=this.base.options.ownerDocument.createElement("li"),b.isElement(c)?a.appendChild(c):a.innerHTML=c,e.appendChild(a))}.bind(this)),d=e.querySelectorAll("button"),d.length>0&&(d[0].classList.add(this.options.firstButtonClass),d[d.length-1].classList.add(this.options.lastButtonClass)),e},deactivate:function(){this.toolbar&&(this.toolbar.parentNode&&this.toolbar.parentNode.removeChild(this.toolbar),delete this.toolbar)},getToolbarElement:function(){return this.toolbar||(this.toolbar=this.createToolbar()),this.toolbar},getToolbarActionsElement:function(){return this.getToolbarElement().querySelector(".medium-editor-toolbar-actions")},initThrottledMethods:function(){this.throttledPositionToolbar=b.throttle(function(){this.base.isActive&&this.positionToolbarIfShown()}.bind(this))},attachEventHandlers:function(){this.base.on(this.options.ownerDocument.documentElement,"mousedown",this.handleDocumentMousedown.bind(this)),this.base.on(this.options.ownerDocument.documentElement,"mouseup",this.handleDocumentMouseup.bind(this)),this.options.staticToolbar&&this.options.stickyToolbar&&this.base.on(this.options.contentWindow,"scroll",this.handleWindowScroll.bind(this),!0),this.base.on(this.options.contentWindow,"resize",this.handleWindowResize.bind(this)),this.base.elements.forEach(function(a){this.base.on(a,"click",this.handleEditableClick.bind(this)),this.base.on(a,"keyup",this.handleEditableKeyup.bind(this)),this.base.on(a,"blur",this.handleEditableBlur.bind(this))}.bind(this))},handleWindowScroll:function(){this.positionToolbarIfShown()},handleWindowResize:function(){this.throttledPositionToolbar()},handleDocumentMousedown:function(a){this.lastMousedownTarget=a.target},handleDocumentMouseup:function(a){return this.lastMousedownTarget=null,a&&a.target&&b.isDescendant(this.getToolbarElement(),a.target)?!1:void this.checkState()},handleEditableClick:function(){setTimeout(function(){this.checkState()}.bind(this),0)},handleEditableKeyup:function(){this.checkState()},handleEditableBlur:function(a){var c=!1,d=a&&a.relatedTarget?a.relatedTarget:this.lastMousedownTarget;return b.isDescendant(this.getToolbarElement(),d)?!1:(d&&(this.base.elements.forEach(function(a){c=c||b.isDescendant(a,d)||d===a},this),c||this.options.contentWindow.getSelection().removeAllRanges()),void this.checkState())},handleBlur:function(){setTimeout(function(){this.hideToolbar()}.bind(this),0)},isDisplayed:function(){return this.getToolbarElement().classList.contains("medium-editor-toolbar-active")},showToolbar:function(){this.isDisplayed()||(this.getToolbarElement().classList.add("medium-editor-toolbar-active"),"function"==typeof this.options.onShowToolbar&&this.options.onShowToolbar())},hideToolbar:function(){this.isDisplayed()&&(this.base.commands.forEach(function(a){"function"==typeof a.onHide&&a.onHide()}),this.getToolbarElement().classList.remove("medium-editor-toolbar-active"),"function"==typeof this.options.onHideToolbar&&this.options.onHideToolbar())},isToolbarDefaultActionsDisplayed:function(){return"block"===this.getToolbarActionsElement().style.display},hideToolbarDefaultActions:function(){this.isToolbarDefaultActionsDisplayed()&&(this.getToolbarActionsElement().style.display="none")},showToolbarDefaultActions:function(){this.hideExtensionForms(),this.isToolbarDefaultActionsDisplayed()||(this.getToolbarActionsElement().style.display="block"),this.base.delay(function(){this.showToolbar()}.bind(this))},hideExtensionForms:function(){this.base.commands.forEach(function(a){a.hasForm&&a.isDisplayed()&&a.hideForm()})},multipleBlockElementsSelected:function(){var a=c.getSelectionHtml.call(this).replace(/<[\S]+><\/[\S]+>/gim,""),b=a.match(/<(p|h[1-6]|blockquote)[^>]*>/g);return!!b&&b.length>1},checkSelectionElement:function(a,d){var e,f,g,h=0,i=a.getRangeAt(0);if(this.options.standardizeSelectionStart&&i.startContainer.nodeValue&&i.startOffset===i.startContainer.nodeValue.length&&(f=b.findAdjacentTextNodeWithContent(c.getSelectionElement(this.options.contentWindow),i.startContainer,this.options.ownerDocument))){for(h=0;0===f.nodeValue.substr(h,1).trim().length;)h+=1;g=this.options.ownerDocument.createRange(),g.setStart(f,h),g.setEnd(i.endContainer,i.endOffset),a.removeAllRanges(),a.addRange(g),i=g}for(e=0;e<this.base.elements.length;e+=1)if(this.base.elements[e]===d)return void this.showAndUpdateToolbar();this.options.staticToolbar||this.hideToolbar()},checkState:function(){var a,b;this.base.preventSelectionUpdates||(a=this.options.contentWindow.getSelection(),!this.options.updateOnEmptySelection&&""===a.toString().trim()||this.options.allowMultiParagraphSelection===!1&&this.multipleBlockElementsSelected()||c.selectionInContentEditableFalse(this.options.contentWindow)?this.options.staticToolbar?this.showAndUpdateToolbar():this.hideToolbar():(b=c.getSelectionElement(this.options.contentWindow),!b||b.getAttribute("data-disable-toolbar")?this.options.staticToolbar||this.hideToolbar():this.checkSelectionElement(a,b)))},showAndUpdateToolbar:function(){this.setToolbarButtonStates(),this.showToolbarDefaultActions(),this.setToolbarPosition()},setToolbarButtonStates:function(){this.base.commands.forEach(function(a){"function"==typeof a.isActive&&a.setInactive()}.bind(this)),this.checkActiveButtons()},checkActiveButtons:function(){var a,d=[],e=null,f=b.getSelectionRange(this.options.ownerDocument),g=function(b){"function"==typeof b.checkState?b.checkState(a):"function"==typeof b.isActive&&"function"==typeof b.isAlreadyApplied&&!b.isActive()&&b.isAlreadyApplied(a)&&b.setActive()};if(f)for(a=c.getSelectedParentElement(f),this.base.commands.forEach(function(a){return"function"==typeof a.queryCommandState&&(e=a.queryCommandState(),null!==e)?void(e&&a.setActive()):void d.push(a)});void 0!==a.tagName&&-1===b.parentElements.indexOf(a.tagName.toLowerCase)&&(d.forEach(g),-1===this.base.elements.indexOf(a));)a=a.parentNode},positionToolbarIfShown:function(){this.isDisplayed()&&this.setToolbarPosition()},setToolbarPosition:function(){var a,b=c.getSelectionElement(this.options.contentWindow),d=this.options.contentWindow.getSelection();return b&&this.options.contentWindow.getSelection().focusNode?-1===this.base.elements.indexOf(b)?this:(this.options.staticToolbar?(this.showToolbar(),this.positionStaticToolbar(b)):d.isCollapsed||(this.showToolbar(),this.positionToolbar(d)),a=this.base.getExtensionByName("anchor-preview"),void(a&&"function"==typeof a.hidePreview&&a.hidePreview())):this},positionStaticToolbar:function(a){this.getToolbarElement().style.left="0";var b,c=this.options.ownerDocument.documentElement&&this.options.ownerDocument.documentElement.scrollTop||this.options.ownerDocument.body.scrollTop,d=this.options.contentWindow.innerWidth,e=this.getToolbarElement(),f=a.getBoundingClientRect(),g=f.top+c,h=f.left+f.width/2,i=e.offsetHeight,j=e.offsetWidth,k=j/2;this.options.stickyToolbar?c>g+a.offsetHeight-i?(e.style.top=g+a.offsetHeight-i+"px",e.classList.remove("sticky-toolbar")):c>g-i?(e.classList.add("sticky-toolbar"),e.style.top="0px"):(e.classList.remove("sticky-toolbar"),e.style.top=g-i+"px"):e.style.top=g-i+"px","left"===this.options.toolbarAlign?b=f.left:"center"===this.options.toolbarAlign?b=h-k:"right"===this.options.toolbarAlign&&(b=f.right-j),0>b?b=0:b+j>d&&(b=d-j),e.style.left=b+"px"},positionToolbar:function(a){this.getToolbarElement().style.left="0";var b=this.options.contentWindow.innerWidth,c=a.getRangeAt(0),d=c.getBoundingClientRect(),e=(d.left+d.right)/2,f=this.getToolbarElement(),g=f.offsetHeight,h=f.offsetWidth,i=h/2,j=50,k=this.options.diffLeft-i;d.top<j?(f.classList.add("medium-toolbar-arrow-over"),f.classList.remove("medium-toolbar-arrow-under"),f.style.top=j+d.bottom-this.options.diffTop+this.options.contentWindow.pageYOffset-g+"px"):(f.classList.add("medium-toolbar-arrow-under"),f.classList.remove("medium-toolbar-arrow-over"),f.style.top=d.top+this.options.diffTop+this.options.contentWindow.pageYOffset-g+"px"),f.style.left=i>e?k+i+"px":i>b-e?b+k-i+"px":k+e+"px"}}}();var k;return function(){k=function(a){this.base=a,this.initPlaceholders(),this.attachEventHandlers()},k.prototype={initPlaceholders:function(){this.base.elements.forEach(function(a){this.updatePlaceholder(a)}.bind(this))},showPlaceholder:function(a){a&&a.classList.add("medium-editor-placeholder")},hidePlaceholder:function(a){a&&a.classList.remove("medium-editor-placeholder")},updatePlaceholder:function(a){a.querySelector("img")||a.querySelector("blockquote")||""!==a.textContent.replace(/^\s+|\s+$/g,"")?this.hidePlaceholder(a):this.showPlaceholder(a)},attachEventHandlers:function(){this.base.subscribe("externalInteraction",this.handleExternalInteraction.bind(this)),this.base.subscribe("editableBlur",this.handleBlur.bind(this)),this.base.subscribe("editableClick",this.handleHidePlaceholderEvent.bind(this)),this.base.subscribe("editableKeypress",this.handleHidePlaceholderEvent.bind(this)),this.base.subscribe("editablePaste",this.handleHidePlaceholderEvent.bind(this))},handleHidePlaceholderEvent:function(a,b){this.hidePlaceholder(b)},handleBlur:function(a,b){this.updatePlaceholder(b)},handleExternalInteraction:function(){this.initPlaceholders()}}}(),function(){function l(a,c){if(this.options.disableReturn||c.getAttribute("data-disable-return"))a.preventDefault();else if(this.options.disableDoubleReturn||this.getAttribute("data-disable-double-return")){var d=b.getSelectionStart(this.options.ownerDocument);d&&""===d.textContent.trim()&&a.preventDefault()}}function m(a){var c=b.getSelectionStart(this.options.ownerDocument),d=c&&c.tagName.toLowerCase();"pre"===d&&(a.preventDefault(),b.insertHTMLCommand(this.options.ownerDocument," ")),b.isListItem(c)&&(a.preventDefault(),a.shiftKey?this.options.ownerDocument.execCommand("outdent",!1,null):this.options.ownerDocument.execCommand("indent",!1,null))}function n(a){var d,e,f,g=b.getSelectionStart(this.options.ownerDocument),h=g.tagName.toLowerCase(),i=/^(\s+|<br\/?>)?$/i,j=/h\d/i;(a.which===b.keyCode.BACKSPACE||a.which===b.keyCode.ENTER)&&g.previousElementSibling&&j.test(h)&&0===c.getCaretOffsets(g).left?a.which===b.keyCode.BACKSPACE&&i.test(g.previousElementSibling.innerHTML)?(g.previousElementSibling.parentNode.removeChild(g.previousElementSibling),a.preventDefault()):a.which===b.keyCode.ENTER&&(f=this.options.ownerDocument.createElement("p"),f.innerHTML="<br>",g.previousElementSibling.parentNode.insertBefore(f,g),a.preventDefault()):a.which===b.keyCode.DELETE&&g.nextElementSibling&&g.previousElementSibling&&!j.test(h)&&i.test(g.innerHTML)&&j.test(g.nextElementSibling.tagName)?(d=this.options.ownerDocument.createRange(),e=this.options.ownerDocument.getSelection(),d.setStart(g.nextElementSibling,0),d.collapse(!0),e.removeAllRanges(),e.addRange(d),g.previousElementSibling.parentNode.removeChild(g),a.preventDefault()):a.which!==b.keyCode.BACKSPACE||"li"!==h||!i.test(g.innerHTML)||g.previousElementSibling||g.parentElement.previousElementSibling||"li"!==g.nextElementSibling.tagName.toLowerCase()||(f=this.options.ownerDocument.createElement("p"),f.innerHTML="<br>",g.parentElement.parentElement.insertBefore(f,g.parentElement),d=this.options.ownerDocument.createRange(),e=this.options.ownerDocument.getSelection(),d.setStart(f,0),d.collapse(!0),e.removeAllRanges(),e.addRange(d),g.parentElement.removeChild(g),a.preventDefault())}function o(a){var b="medium-editor-dragover";a.preventDefault(),a.dataTransfer.dropEffect="copy","dragover"===a.type?a.target.classList.add(b):"dragleave"===a.type&&a.target.classList.remove(b)}function p(a){var c,d="medium-editor-dragover";a.preventDefault(),a.stopPropagation(),a.dataTransfer.files&&(c=Array.prototype.slice.call(a.dataTransfer.files,0),c.some(function(a){if(a.type.match("image")){var c,d;c=new FileReader,c.readAsDataURL(a),d="medium-img-"+ +new Date,b.insertHTMLCommand(this.options.ownerDocument,'<img class="medium-image-loading" id="'+d+'" />'),c.onload=function(){var a=this.options.ownerDocument.getElementById(d);a&&(a.removeAttribute("id"),a.removeAttribute("class"),a.src=c.result)}.bind(this)}}.bind(this))),a.target.classList.remove(d)}function q(a){var c,d=b.getSelectionStart(this.options.ownerDocument);d&&(d.getAttribute("data-medium-element")&&0===d.children.length&&this.options.ownerDocument.execCommand("formatBlock",!1,"p"),a.which!==b.keyCode.ENTER||b.isListItem(d)||(c=d.tagName.toLowerCase(),"a"===c?this.options.ownerDocument.execCommand("unlink",!1,null):a.shiftKey||/h\d/.test(c)||this.options.ownerDocument.execCommand("formatBlock",!1,"p")))}function r(a){a||(a=[]),"string"==typeof a&&(a=this.options.ownerDocument.querySelectorAll(a)),b.isElement(a)&&(a=[a]),this.elements=Array.prototype.slice.apply(a)}function s(a,b,c){return a.parent&&(a.base=c),"function"==typeof a.init&&a.init(c),a.name||(a.name=b),a}function t(){var a,b=!1;if(this.options.disableAnchorPreview)return!1;if(this.options.extensions["anchor-preview"])return!1;if(this.options.disableToolbar)return!1;for(a=0;a<this.elements.length;a+=1)if(!this.elements[a].getAttribute("data-disable-toolbar")){b=!0;break}return b}function u(a){var b=this.options.ownerDocument.createElement("div"),c=+new Date,d=this.elements[a];return b.className=d.className,b.id=c,b.innerHTML=d.value,d.classList.add("medium-editor-hidden"),d.parentNode.insertBefore(b,d),this.on(b,"input",function(){d.value=this.serialize()[c].value}.bind(this)),b}function v(){var a,b=!1;for(a=0;a<this.elements.length;a+=1)this.options.disableEditing||this.elements[a].getAttribute("data-disable-editing")||("textarea"===this.elements[a].tagName.toLowerCase()&&(this.elements[a]=u.call(this,a)),this.elements[a].setAttribute("contentEditable",!0)),this.elements[a].getAttribute("data-placeholder")||this.elements[a].setAttribute("data-placeholder",this.options.placeholder),this.elements[a].setAttribute("data-medium-element",!0),this.elements[a].setAttribute("role","textbox"),this.elements[a].setAttribute("aria-multiline",!0),this.options.disableToolbar||this.elements[a].getAttribute("data-disable-toolbar")||(b=!0);!this.toolbar&&b&&(this.toolbar=new j(this),this.options.elementsContainer.appendChild(this.toolbar.getToolbarElement()))}function w(){var a;if(this.subscribe("editableKeydownTab",m.bind(this)),this.subscribe("editableKeydownDelete",n.bind(this)),this.subscribe("editableKeydownEnter",n.bind(this)),this.options.disableReturn||this.options.disableDoubleReturn)this.subscribe("editableKeydownEnter",l.bind(this));else for(a=0;a<this.elements.length;a+=1)if(this.elements[a].getAttribute("data-disable-return")||this.elements[a].getAttribute("data-disable-double-return")){this.subscribe("editableKeydownEnter",l.bind(this));break}this.options.disableReturn||this.elements.forEach(function(a){a.getAttribute("data-disable-return")||this.on(a,"keyup",q.bind(this))}.bind(this)),this.options.imageDragging&&(this.subscribe("editableDrag",o.bind(this)),this.subscribe("editableDrop",p.bind(this)))}function x(){var a,b,c=this.options.buttons,d=this.options.extensions;this.commands=[],c.forEach(function(b){d[b]?(a=s(d[b],b,this),this.commands.push(a)):"anchor"===b?(a=s(new h,b,this),this.commands.push(a)):f.hasOwnProperty(b)&&(a=new e(f[b],this),this.commands.push(a))}.bind(this));for(b in d)d.hasOwnProperty(b)&&-1===c.indexOf(b)&&(a=s(d[b],b,this));t.call(this)&&this.commands.push(s(new i,"anchor-preview",this))}function y(a,c){var d,e=/^append-(.+)$/gi;return d=e.exec(a),d?b.execFormatBlock(this.options.ownerDocument,d[1]):"createLink"===a?this.createLink(c):"image"===a?this.options.ownerDocument.execCommand("insertImage",!1,this.options.contentWindow.getSelection()):this.options.ownerDocument.execCommand(a,!1,null)}a.statics={ButtonsData:f,DefaultButton:e,AnchorExtension:h,Toolbar:j,AnchorPreview:i},a.util=b,a.selection=c,a.prototype={defaults:{allowMultiParagraphSelection:!0,anchorInputPlaceholder:"Paste or type a link",anchorInputCheckboxLabel:"Open in new window",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,disableAnchorPreview:!1,disableEditing:!1,disablePlaceholders:!1,toolbarAlign:"center",elementsContainer:!1,imageDragging:!0,standardizeSelectionStart:!1,contentWindow:window,ownerDocument:document,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"},init:function(a,c){var d=1;if(this.options=b.defaults(c,this.defaults),r.call(this,a),0!==this.elements.length){for(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.isActive||(this.events=new d(this),this.isActive=!0,x.call(this),v.call(this),w.call(this),this.pasteHandler=new g(this),this.options.disablePlaceholders||(this.placeholders=new k(this)))},destroy:function(){if(this.isActive){var a;for(this.isActive=!1,void 0!==this.toolbar&&(this.toolbar.deactivate(),delete this.toolbar),a=0;a<this.elements.length;a+=1)this.elements[a].removeAttribute("contentEditable"),this.elements[a].removeAttribute("data-medium-element");this.commands.forEach(function(a){"function"==typeof a.deactivate&&a.deactivate()}.bind(this)),this.events.detachAllDOMEvents()}},on:function(a,b,c,d){this.events.attachDOMEvent(a,b,c,d)},off:function(a,b,c,d){this.events.detachDOMEvent(a,b,c,d)},subscribe:function(a,b){this.events.attachCustomEvent(a,b)},delay:function(a){var b=this;setTimeout(function(){b.isActive&&a()},this.options.delay)},serialize:function(){var a,b,c={};for(a=0;a<this.elements.length;a+=1)b=""!==this.elements[a].id?this.elements[a].id:"element-"+a,c[b]={value:this.elements[a].innerHTML.trim()};return c},getExtensionByName:function(a){var b;return this.commands&&this.commands.length&&this.commands.forEach(function(c){c.name===a&&(b=c)}),b},callExtensions:function(a){if(!(arguments.length<1)){var b,c,d=Array.prototype.slice.call(arguments,1);for(c in this.options.extensions)this.options.extensions.hasOwnProperty(c)&&(b=this.options.extensions[c],void 0!==b[a]&&b[a].apply(b,d));return this}},stopSelectionUpdates:function(){this.preventSelectionUpdates=!0},startSelectionUpdates:function(){this.preventSelectionUpdates=!1},checkSelection:function(){return this.toolbar&&this.toolbar.checkState(),this},queryCommandState:function(a){var b,c=/^full-(.+)$/gi,d=null;b=c.exec(a),b&&(a=b[1]);try{d=this.options.ownerDocument.queryCommandState(a)}catch(e){d=null}return d},execAction:function(a,c){var d,e,f=/^full-(.+)$/gi;return d=f.exec(a),d?(this.saveSelection(),this.selectAllContents(),e=y.call(this,d[1],c),this.restoreSelection()):e=y.call(this,a,c),("insertunorderedlist"===a||"insertorderedlist"===a)&&b.cleanListDOM(this.getSelectedParentElement()),this.checkSelection(),e},getSelectedParentElement:function(a){return void 0===a&&(a=this.options.contentWindow.getSelection().getRangeAt(0)),c.getSelectedParentElement(a)},hideToolbarDefaultActions:function(){return this.toolbar&&this.toolbar.hideToolbarDefaultActions(),this},setToolbarPosition:function(){this.toolbar&&this.toolbar.setToolbarPosition()},selectAllContents:function(){var a=this.options.ownerDocument.createRange(),b=this.options.contentWindow.getSelection(),d=c.getSelectionElement(this.options.contentWindow);if(d){for(;1===d.children.length;)d=d.children[0];a.selectNodeContents(d),b.removeAllRanges(),b.addRange(a)}},saveSelection:function(){this.selectionState=null;var a,c,d,e=this.options.contentWindow.getSelection(),f=-1;e.rangeCount>0&&(a=e.getRangeAt(0),c=a.cloneRange(),this.elements.forEach(function(c,d){return c===a.startContainer||b.isDescendant(c,a.startContainer)?(f=d,!1):void 0}),f>-1&&(c.selectNodeContents(this.elements[f]),c.setEnd(a.startContainer,a.startOffset),d=c.toString().length,this.selectionState={start:d,end:d+a.toString().length,editableElementIndex:f}))},restoreSelection:function(){if(this.selectionState){var a,b,c,d,e=this.elements[this.selectionState.editableElementIndex],f=0,g=this.options.ownerDocument.createRange(),h=[e],i=!1,j=!1;for(g.setStart(e,0),g.collapse(!0),a=h.pop();!j&&a;){if(3===a.nodeType)d=f+a.length,!i&&this.selectionState.start>=f&&this.selectionState.start<=d&&(g.setStart(a,this.selectionState.start-f),i=!0),i&&this.selectionState.end>=f&&this.selectionState.end<=d&&(g.setEnd(a,this.selectionState.end-f),j=!0),f=d;else for(b=a.childNodes.length-1;b>=0;)h.push(a.childNodes[b]),b-=1;j||(a=h.pop())}c=this.options.contentWindow.getSelection(),c.removeAllRanges(),c.addRange(g)}},createLink:function(a){var c,d;if(a.url&&a.url.trim().length>0&&(this.options.ownerDocument.execCommand("createLink",!1,a.url),(this.options.targetBlank||"_blank"===a.target)&&b.setTargetBlank(b.getSelectionStart(this.options.ownerDocument)),a.buttonClass&&b.addClassToAnchors(b.getSelectionStart(this.options.ownerDocument),a.buttonClass)),this.options.targetBlank||"_blank"===a.target||a.buttonClass)for(c=this.options.ownerDocument.createEvent("HTMLEvents"),c.initEvent("input",!0,!0,this.options.contentWindow),d=0;d<this.elements.length;d+=1)this.elements[d].dispatchEvent(c)},activate:function(){b.deprecatedMethod.call(this,"activate","setup",arguments)},deactivate:function(){b.deprecatedMethod.call(this,"deactivate","destroy",arguments)},cleanPaste:function(a){this.pasteHandler.cleanPaste(a)},pasteHTML:function(a,b){this.pasteHandler.pasteHTML(a,b)}}}(),a.version=function(a,b,c){return{major:parseInt(a,10),minor:parseInt(b,10),revision:parseInt(c,10),toString:function(){return[a,b,c].join(".")}}}.apply(this,{version:"4.1.1"}.version.split(".")),a}());
"classList"in document.createElement("_")||!function(a){"use strict";if("Element"in a){var b="classList",c="prototype",d=a.Element[c],e=Object,f=String[c].trim||function(){return this.replace(/^\s+|\s+$/g,"")},g=Array[c].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1},h=function(a,b){this.name=a,this.code=DOMException[a],this.message=b},i=function(a,b){if(""===b)throw new h("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(b))throw new h("INVALID_CHARACTER_ERR","String contains an invalid character");return g.call(a,b)},j=function(a){for(var b=f.call(a.getAttribute("class")||""),c=b?b.split(/\s+/):[],d=0,e=c.length;e>d;d++)this.push(c[d]);this._updateClassName=function(){a.setAttribute("class",this.toString())}},k=j[c]=[],l=function(){return new j(this)};if(h[c]=Error[c],k.item=function(a){return this[a]||null},k.contains=function(a){return a+="",-1!==i(this,a)},k.add=function(){var a,b=arguments,c=0,d=b.length,e=!1;do a=b[c]+"",-1===i(this,a)&&(this.push(a),e=!0);while(++c<d);e&&this._updateClassName()},k.remove=function(){var a,b,c=arguments,d=0,e=c.length,f=!1;do for(a=c[d]+"",b=i(this,a);-1!==b;)this.splice(b,1),f=!0,b=i(this,a);while(++d<e);f&&this._updateClassName()},k.toggle=function(a,b){a+="";var c=this.contains(a),d=c?b!==!0&&"remove":b!==!1&&"add";return d&&this[d](a),b===!0||b===!1?b:!c},k.toString=function(){return this.join(" ")},e.defineProperty){var m={get:l,enumerable:!0,configurable:!0};try{e.defineProperty(d,b,m)}catch(n){-2146823252===n.number&&(m.enumerable=!1,e.defineProperty(d,b,m))}}else e[c].__defineGetter__&&d.__defineGetter__(b,l)}}(self),function(a){"use strict";if(a.URL=a.URL||a.webkitURL,a.Blob&&a.URL)try{return void new Blob}catch(b){}var c=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||function(a){var b=function(a){return Object.prototype.toString.call(a).match(/^\[object\s(.*)\]$/)[1]},c=function(){this.data=[]},d=function(a,b,c){this.data=a,this.size=a.length,this.type=b,this.encoding=c},e=c.prototype,f=d.prototype,g=a.FileReaderSync,h=function(a){this.code=this[this.name=a]},i="NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR".split(" "),j=i.length,k=a.URL||a.webkitURL||a,l=k.createObjectURL,m=k.revokeObjectURL,n=k,o=a.btoa,p=a.atob,q=a.ArrayBuffer,r=a.Uint8Array,s=/^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/;for(d.fake=f.fake=!0;j--;)h.prototype[i[j]]=j+1;return k.createObjectURL||(n=a.URL=function(a){var b,c=document.createElementNS("http://www.w3.org/1999/xhtml","a");return c.href=a,"origin"in c||("data:"===c.protocol.toLowerCase()?c.origin=null:(b=a.match(s),c.origin=b&&b[1])),c}),n.createObjectURL=function(a){var b,c=a.type;return null===c&&(c="application/octet-stream"),a instanceof d?(b="data:"+c,"base64"===a.encoding?b+";base64,"+a.data:"URI"===a.encoding?b+","+decodeURIComponent(a.data):o?b+";base64,"+o(a.data):b+","+encodeURIComponent(a.data)):l?l.call(k,a):void 0},n.revokeObjectURL=function(a){"data:"!==a.substring(0,5)&&m&&m.call(k,a)},e.append=function(a){var c=this.data;if(r&&(a instanceof q||a instanceof r)){for(var e="",f=new r(a),i=0,j=f.length;j>i;i++)e+=String.fromCharCode(f[i]);c.push(e)}else if("Blob"===b(a)||"File"===b(a)){if(!g)throw new h("NOT_READABLE_ERR");var k=new g;c.push(k.readAsBinaryString(a))}else a instanceof d?"base64"===a.encoding&&p?c.push(p(a.data)):"URI"===a.encoding?c.push(decodeURIComponent(a.data)):"raw"===a.encoding&&c.push(a.data):("string"!=typeof a&&(a+=""),c.push(unescape(encodeURIComponent(a))))},e.getBlob=function(a){return arguments.length||(a=null),new d(this.data.join(""),a,"raw")},e.toString=function(){return"[object BlobBuilder]"},f.slice=function(a,b,c){var e=arguments.length;return 3>e&&(c=null),new d(this.data.slice(a,e>1?b:this.data.length),c,this.encoding)},f.toString=function(){return"[object Blob]"},f.close=function(){this.size=0,delete this.data},c}(a);a.Blob=function(a,b){var d=b?b.type||"":"",e=new c;if(a)for(var f=0,g=a.length;g>f;f++)e.append(Uint8Array&&a[f]instanceof Uint8Array?a[f].buffer:a[f]);var h=e.getBlob(d);return!h.slice&&h.webkitSlice&&(h.slice=h.webkitSlice),h};var d=Object.getPrototypeOf||function(a){return a.__proto__};a.Blob.prototype=d(new a.Blob)}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content||this),function(a,b){"use strict";"object"==typeof module?module.exports=b:"function"==typeof define&&define.amd?define(function(){return b}):a.MediumEditor=b}(this,function(){"use strict";function a(a,b){return this.init(a,b)}var b;!function(a){function c(b,c,d){d||(d=a);try{for(var e=0;e<b.length;e++){var f=b[e];if(!(f in d)){if(!c)return;d[f]={}}d=d[f]}return d}catch(g){}}function d(a,b){var c,d=Array.prototype.slice.call(arguments,2);b=b||{};for(var e=0;e<d.length;e++){var f=d[e];if(f)for(c in f)f.hasOwnProperty(c)&&"undefined"!=typeof f[c]&&(a||b.hasOwnProperty(c)===!1)&&(b[c]=f[c])}return b}b={isIE:"Microsoft Internet Explorer"===navigator.appName||"Netscape"===navigator.appName&&null!==new RegExp("Trident/.*rv:([0-9]{1,}[.0-9]{0,})").exec(navigator.userAgent),keyCode:{BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,SPACE:32,DELETE:46},parentElements:["p","h1","h2","h3","h4","h5","h6","blockquote","pre"],extend:function(){var a=[!0].concat(Array.prototype.slice.call(arguments));return d.apply(this,a)},defaults:function(){var a=[!1].concat(Array.prototype.slice.call(arguments));return d.apply(this,a)},derives:function(a,b){function c(){}var e=b.prototype;return c.prototype=a.prototype,b.prototype=new c,b.prototype.constructor=a,b.prototype=d(!1,b.prototype,e),b},findAdjacentTextNodeWithContent:function(a,b,c){var d,e=!1,f=c.createNodeIterator(a,NodeFilter.SHOW_TEXT,null,!1);for(d=f.nextNode();d;){if(d===b)e=!0;else if(e&&3===d.nodeType&&d.nodeValue&&d.nodeValue.trim().length>0)break;d=f.nextNode()}return d},isDescendant:function(a,b){if(!a||!b)return!1;for(var c=b.parentNode;null!==c;){if(c===a)return!0;c=c.parentNode}return!1},isElement:function(a){return!(!a||1!==a.nodeType)},now:Date.now,throttle:function(a,b){var c,d,e,f=50,g=null,h=0,i=function(){h=Date.now(),g=null,e=a.apply(c,d),g||(c=d=null)};return b||0===b||(b=f),function(){var f=Date.now(),j=b-(f-h);return c=this,d=arguments,0>=j||j>b?(g&&(clearTimeout(g),g=null),h=f,e=a.apply(c,d),g||(c=d=null)):g||(g=setTimeout(i,j)),e}},traverseUp:function(a,b){do{if(1===a.nodeType){if(b(a))return a;if(a.getAttribute("data-medium-element"))return!1}a=a.parentNode}while(a);return!1},htmlEntities:function(a){return String(a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")},insertHTMLCommand:function(a,b){var c,d,e,f,g,h,i;if(a.queryCommandSupported("insertHTML"))try{return a.execCommand("insertHTML",!1,b)}catch(j){}if(c=a.defaultView.getSelection(),c.getRangeAt&&c.rangeCount){if(d=c.getRangeAt(0),i=d.commonAncestorContainer,3===i.nodeType&&i.nodeValue===d.toString()||3!==i.nodeType&&i.innerHTML===d.toString()){for(;i.parentNode&&1===i.parentNode.childNodes.length&&!i.parentNode.getAttribute("data-medium-element");)i=i.parentNode;d.selectNode(i)}for(d.deleteContents(),e=a.createElement("div"),e.innerHTML=b,f=a.createDocumentFragment();e.firstChild;)g=e.firstChild,h=f.appendChild(g);d.insertNode(f),h&&(d=d.cloneRange(),d.setStartAfter(h),d.collapse(!0),c.removeAllRanges(),c.addRange(d))}},getSelectionRange:function(a){var b=a.getSelection();return 0===b.rangeCount?null:b.getRangeAt(0)},getSelectionStart:function(a){var b=a.getSelection().anchorNode,c=b&&3===b.nodeType?b.parentNode:b;return c},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}},execFormatBlock:function(a,b){var c=this.getSelectionData(this.getSelectionStart(a));if("blockquote"===b&&c.el&&"blockquote"===c.el.parentNode.tagName.toLowerCase())return a.execCommand("outdent",!1,null);if(c.tagName===b&&(b="p"),this.isIE){if("blockquote"===b)return a.execCommand("indent",!1,b);b="<"+b+">"}return a.execCommand("formatBlock",!1,b)},setTargetBlank:function(a){var b;if("a"===a.tagName.toLowerCase())a.target="_blank";else for(a=a.getElementsByTagName("a"),b=0;b<a.length;b+=1)a[b].target="_blank"},addClassToAnchors:function(a,b){var c,d,e=b.split(" ");if("a"===a.tagName.toLowerCase())for(d=0;d<e.length;d+=1)a.classList.add(e[d]);else for(a=a.getElementsByTagName("a"),c=0;c<a.length;c+=1)for(d=0;d<e.length;d+=1)a[c].classList.add(e[d])},isListItem:function(a){if(!a)return!1;if("li"===a.tagName.toLowerCase())return!0;for(var b=a.parentNode,c=b.tagName.toLowerCase();-1===this.parentElements.indexOf(c)&&"div"!==c;){if("li"===c)return!0;if(b=b.parentNode,!b||!b.tagName)return!1;c=b.tagName.toLowerCase()}return!1},cleanListDOM:function(a){if("li"===a.tagName.toLowerCase()){var b=a.parentElement;"p"===b.parentElement.tagName.toLowerCase()&&this.unwrapElement(b.parentElement)}},unwrapElement:function(a){var b,c=a.parentNode,d=a.firstChild;do b=d.nextSibling,c.insertBefore(d,a),d=b;while(d);c.removeChild(a)},warn:function(){void 0!==a.console&&console.warn.apply(console,arguments)},deprecated:function(a,c,d){var e=a+" is deprecated, please use "+c+" instead.";d&&(e+=" Will be removed in "+d),b.warn(e)},deprecatedMethod:function(a,c,d,e){b.deprecated(a,c,e),"function"==typeof this[c]&&this[c].apply(this,d)},cleanupAttrs:function(a,b){b.forEach(function(b){a.removeAttribute(b)})},cleanupTags:function(a,b){b.forEach(function(b){a.tagName.toLowerCase()===b&&a.parentNode.removeChild(a)})},setObject:function(a,b,d){var e=a.split("."),f=e.pop(),g=c(e,!0,d);return g&&f?g[f]=b:void 0},getObject:function(a,b,d){return c(a?a.split("."):[],b,d)}}}(window);var c;!function(){c={bold:{name:"bold",action:"bold",aria:"bold",tagNames:["b","strong"],style:{prop:"font-weight",value:"700|bold"},useQueryState:!0,contentDefault:"<b>B</b>",contentFA:'<i class="fa fa-bold"></i>',key:"b"},italic:{name:"italic",action:"italic",aria:"italic",tagNames:["i","em"],style:{prop:"font-style",value:"italic"},useQueryState:!0,contentDefault:"<b><i>I</i></b>",contentFA:'<i class="fa fa-italic"></i>',key:"i"},underline:{name:"underline",action:"underline",aria:"underline",tagNames:["u"],style:{prop:"text-decoration",value:"underline"},useQueryState:!0,contentDefault:"<b><u>U</u></b>",contentFA:'<i class="fa fa-underline"></i>',key:"u"},strikethrough:{name:"strikethrough",action:"strikethrough",aria:"strike through",tagNames:["strike"],style:{prop:"text-decoration",value:"line-through"},useQueryState:!0,contentDefault:"<s>A</s>",contentFA:'<i class="fa fa-strikethrough"></i>'},superscript:{name:"superscript",action:"superscript",aria:"superscript",tagNames:["sup"],contentDefault:"<b>x<sup>1</sup></b>",contentFA:'<i class="fa fa-superscript"></i>'},subscript:{name:"subscript",action:"subscript",aria:"subscript",tagNames:["sub"],contentDefault:"<b>x<sub>1</sub></b>",contentFA:'<i class="fa fa-subscript"></i>'},image:{name:"image",action:"image",aria:"image",tagNames:["img"],contentDefault:"<b>image</b>",contentFA:'<i class="fa fa-picture-o"></i>'},quote:{name:"quote",action:"append-blockquote",aria:"blockquote",tagNames:["blockquote"],contentDefault:"<b>&ldquo;</b>",contentFA:'<i class="fa fa-quote-right"></i>'},orderedlist:{name:"orderedlist",action:"insertorderedlist",aria:"ordered list",tagNames:["ol"],useQueryState:!0,contentDefault:"<b>1.</b>",contentFA:'<i class="fa fa-list-ol"></i>'},unorderedlist:{name:"unorderedlist",action:"insertunorderedlist",aria:"unordered list",tagNames:["ul"],useQueryState:!0,contentDefault:"<b>&bull;</b>",contentFA:'<i class="fa fa-list-ul"></i>'},pre:{name:"pre",action:"append-pre",aria:"preformatted text",tagNames:["pre"],contentDefault:"<b>0101</b>",contentFA:'<i class="fa fa-code fa-lg"></i>'},indent:{name:"indent",action:"indent",aria:"indent",tagNames:[],contentDefault:"<b>&rarr;</b>",contentFA:'<i class="fa fa-indent"></i>'},outdent:{name:"outdent",action:"outdent",aria:"outdent",tagNames:[],contentDefault:"<b>&larr;</b>",contentFA:'<i class="fa fa-outdent"></i>'},justifyCenter:{name:"justifyCenter",action:"justifyCenter",aria:"center justify",tagNames:[],style:{prop:"text-align",value:"center"},contentDefault:"<b>C</b>",contentFA:'<i class="fa fa-align-center"></i>'},justifyFull:{name:"justifyFull",action:"justifyFull",aria:"full justify",tagNames:[],style:{prop:"text-align",value:"justify"},contentDefault:"<b>J</b>",contentFA:'<i class="fa fa-align-justify"></i>'},justifyLeft:{name:"justifyLeft",action:"justifyLeft",aria:"left justify",tagNames:[],style:{prop:"text-align",value:"left"},contentDefault:"<b>L</b>",contentFA:'<i class="fa fa-align-left"></i>'},justifyRight:{name:"justifyRight",action:"justifyRight",aria:"right justify",tagNames:[],style:{prop:"text-align",value:"right"},contentDefault:"<b>R</b>",contentFA:'<i class="fa fa-align-right"></i>'},header1:{name:"header1",action:function(a){return"append-"+a.firstHeader},aria:function(a){return a.firstHeader},tagNames:function(a){return[a.firstHeader]},contentDefault:"<b>H1</b>"},header2:{name:"header2",action:function(a){return"append-"+a.secondHeader},aria:function(a){return a.secondHeader},tagNames:function(a){return[a.secondHeader]},contentDefault:"<b>H2</b>"},removeFormat:{name:"removeFormat",aria:"remove formatting",action:"removeFormat",contentDefault:"<b>X</b>",contentFA:'<i class="fa fa-eraser"></i>'}}}();var d;!function(){d={allowMultiParagraphSelection:!0,anchorInputPlaceholder:"Paste or type a link",anchorInputCheckboxLabel:"Open in new window",anchorPreviewHideDelay:500,buttons:["bold","italic","underline","anchor","header1","header2","quote"],buttonLabels:!1,checkLinkFormat:!1,delay:0,diffLeft:0,diffTop:-10,disableReturn:!1,disableDoubleReturn:!1,disableToolbar:!1,disableAnchorPreview:!1,disableEditing:!1,disablePlaceholders:!1,toolbarAlign:"center",elementsContainer:!1,imageDragging:!0,standardizeSelectionStart:!1,contentWindow:window,ownerDocument:document,firstHeader:"h3",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",paste:{forcePlainText:!0,cleanPastedHtml:!1,cleanAttrs:["class","style","dir"],cleanTags:["meta"]}}}();var e;!function(){e=function(a){b.extend(this,a)},e.extend=function(a){var c,d=this;c=a&&a.hasOwnProperty("constructor")?a.constructor:function(){return d.apply(this,arguments)},b.extend(c,d);var e=function(){this.constructor=c};return e.prototype=d.prototype,c.prototype=new e,a&&b.extend(c.prototype,a),c},e.prototype={init:function(){}}}();var f;!function(){f={findMatchingSelectionParent:function(a,c){var d,e,f=c.getSelection();return 0===f.rangeCount?!1:(d=f.getRangeAt(0),e=d.commonAncestorContainer,b.traverseUp(e,a))},getSelectionElement:function(a){return this.findMatchingSelectionParent(function(a){return a.getAttribute("data-medium-element")},a)},selectionInContentEditableFalse:function(a){return this.findMatchingSelectionParent(function(a){return a&&"#text"!==a.nodeName&&"false"===a.getAttribute("contenteditable")},a)},getSelectionHtml:function(){var a,b,c,d="",e=this.options.contentWindow.getSelection();if(e.rangeCount){for(c=this.options.ownerDocument.createElement("div"),a=0,b=e.rangeCount;b>a;a+=1)c.appendChild(e.getRangeAt(a).cloneContents());d=c.innerHTML}return d},getCaretOffsets:function(a,b){var c,d;return b||(b=window.getSelection().getRangeAt(0)),c=b.cloneRange(),d=b.cloneRange(),c.selectNodeContents(a),c.setEnd(b.endContainer,b.endOffset),d.selectNodeContents(a),d.setStart(b.endContainer,b.endOffset),{left:c.toString().length,right:d.toString().length}},rangeSelectsSingleNode:function(a){var b=a.startContainer;return b===a.endContainer&&b.hasChildNodes()&&a.endOffset===a.startOffset+1},getSelectedParentElement:function(a){var b=null;return b=this.rangeSelectsSingleNode(a)&&3!==a.startContainer.childNodes[a.startOffset].nodeType?a.startContainer.childNodes[a.startOffset]:3===a.startContainer.nodeType?a.startContainer.parentNode:a.startContainer}}}();var g;!function(){g=function(a){this.base=a,this.options=this.base.options,this.events=[],this.customEvents={},this.listeners={}},g.prototype={attachDOMEvent:function(a,b,c,d){a.addEventListener(b,c,d),this.events.push([a,b,c,d])},detachDOMEvent: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},detachAllDOMEvents:function(){for(var a=this.events.pop();a;)a[0].removeEventListener(a[1],a[2],a[3]),a=this.events.pop()},attachCustomEvent:function(a,b){this.setupListener(a),this.listeners[a]&&(this.customEvents[a]||(this.customEvents[a]=[]),this.customEvents[a].push(b))},triggerCustomEvent:function(a,b,c){this.customEvents[a]&&this.customEvents[a].forEach(function(a){a(b,c)})},setupListener:function(a){if(!this.listeners[a])switch(a){case"externalInteraction":this.attachDOMEvent(this.options.ownerDocument.body,"click",this.handleInteraction.bind(this),!0),this.attachDOMEvent(this.options.ownerDocument.body,"focus",this.handleInteraction.bind(this),!0),this.listeners[a]=!0;break;case"editableClick":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"click",this.handleClick.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableBlur":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"blur",this.handleBlur.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableKeypress":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"keypress",this.handleKeypress.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableKeydown":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"keydown",this.handleKeydown.bind(this))}.bind(this)),this.listeners[a]=!0;break;case"editableKeydownEnter":this.setupListener("editableKeydown"),this.listeners[a]=!0;break;case"editableKeydownTab":this.setupListener("editableKeydown"),this.listeners[a]=!0;break;case"editableKeydownDelete":this.setupListener("editableKeydown"),this.listeners[a]=!0;break;case"editableMouseover":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"mouseover",this.handleMouseover.bind(this))},this),this.listeners[a]=!0;break;case"editableDrag":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"dragover",this.handleDragging.bind(this)),this.attachDOMEvent(a,"dragleave",this.handleDragging.bind(this))},this),this.listeners[a]=!0;break;case"editableDrop":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"drop",this.handleDrop.bind(this))},this),this.listeners[a]=!0;break;case"editablePaste":this.base.elements.forEach(function(a){this.attachDOMEvent(a,"paste",this.handlePaste.bind(this))},this),this.listeners[a]=!0}},handleInteraction:function(a){var c,d=!1,e=this.options.contentWindow.getSelection(),g=this.base.toolbar?this.base.toolbar.getToolbarElement():null,h=this.base.getExtensionByName("anchor-preview"),i=h&&h.getPreviewElement?h.getPreviewElement():null,j=e.isCollapsed?null:f.getSelectedParentElement(e.getRangeAt(0));for(c=0;c<this.base.elements.length;c+=1)if(this.base.elements[c]===a.target||b.isDescendant(this.base.elements[c],a.target)||b.isDescendant(this.base.elements[c],j)){d=!0;break}d||g&&(g===a.target||b.isDescendant(g,a.target))||i&&(i===a.target||b.isDescendant(i,a.target))||this.triggerCustomEvent("externalInteraction",a)},handleClick:function(a){this.triggerCustomEvent("editableClick",a,a.currentTarget)},handleBlur:function(a){this.triggerCustomEvent("editableBlur",a,a.currentTarget)},handleKeypress:function(a){this.triggerCustomEvent("editableKeypress",a,a.currentTarget)},handleMouseover:function(a){this.triggerCustomEvent("editableMouseover",a,a.currentTarget)},handleDragging:function(a){this.triggerCustomEvent("editableDrag",a,a.currentTarget)},handleDrop:function(a){this.triggerCustomEvent("editableDrop",a,a.currentTarget)},handlePaste:function(a){this.triggerCustomEvent("editablePaste",a,a.currentTarget)},handleKeydown:function(a){switch(this.triggerCustomEvent("editableKeydown",a,a.currentTarget),a.which){case b.keyCode.ENTER:this.triggerCustomEvent("editableKeydownEnter",a,a.currentTarget);break;case b.keyCode.TAB:this.triggerCustomEvent("editableKeydownTab",a,a.currentTarget);break;case b.keyCode.DELETE:case b.keyCode.BACKSPACE:this.triggerCustomEvent("editableKeydownDelete",a,a.currentTarget)}}}}();var h;!function(){h=function(a,b){this.options=a,this.name=a.name,this.init(b)},h.prototype={init:function(a){this.base=a,this.button=this.createButton(),this.base.on(this.button,"click",this.handleClick.bind(this)),this.options.key&&this.base.subscribe("editableKeydown",this.handleKeydown.bind(this))},getButton:function(){return this.button},getAction:function(){return"function"==typeof this.options.action?this.options.action(this.base.options):this.options.action},getAria:function(){return"function"==typeof this.options.aria?this.options.aria(this.base.options):this.options.aria},getTagNames:function(){return"function"==typeof this.options.tagNames?this.options.tagNames(this.base.options):this.options.tagNames},createButton:function(){var a=this.base.options.ownerDocument.createElement("button"),b=this.options.contentDefault;return a.classList.add("medium-editor-action"),a.classList.add("medium-editor-action-"+this.name),a.setAttribute("data-action",this.getAction()),a.setAttribute("aria-label",this.getAria()),this.base.options.buttonLabels&&("fontawesome"===this.base.options.buttonLabels&&this.options.contentFA?b=this.options.contentFA:"object"==typeof this.base.options.buttonLabels&&this.base.options.buttonLabels[this.name]&&(b=this.base.options.buttonLabels[this.options.name])),a.innerHTML=b,a},handleKeydown:function(a){var b,c;(a.ctrlKey||a.metaKey)&&(b=String.fromCharCode(a.which||a.keyCode).toLowerCase(),this.options.key===b&&(a.preventDefault(),a.stopPropagation(),c=this.getAction(),c&&this.base.execAction(c)))},handleClick:function(a){a.preventDefault(),a.stopPropagation();var b=this.getAction();b&&this.base.execAction(b)},isActive:function(){return this.button.classList.contains(this.base.options.activeButtonClass)},setInactive:function(){this.button.classList.remove(this.base.options.activeButtonClass),delete this.knownState},setActive:function(){this.button.classList.add(this.base.options.activeButtonClass),delete this.knownState},queryCommandState:function(){var a=null;return this.options.useQueryState&&(a=this.base.queryCommandState(this.getAction())),a},isAlreadyApplied:function(a){var b,c,d=!1,e=this.getTagNames();return this.knownState===!1||this.knownState===!0?this.knownState:(e&&e.length>0&&a.tagName&&(d=-1!==e.indexOf(a.tagName.toLowerCase())),!d&&this.options.style&&(b=this.options.style.value.split("|"),c=this.base.options.contentWindow.getComputedStyle(a,null).getPropertyValue(this.options.style.prop),b.forEach(function(a){this.knownState||(d=-1!==c.indexOf(a),(d||"text-decoration"!==this.options.style.prop)&&(this.knownState=d))},this)),d)}}}();var i;!function(){function a(){return[[new RegExp(/<[^>]*docs-internal-guid[^>]*>/gi),""],[new RegExp(/<\/b>(<br[^>]*>)?$/gi),""],[new RegExp(/<span class="Apple-converted-space">\s+<\/span>/g)," "],[new RegExp(/<br class="Apple-interchange-newline">/g),"<br>"],[new RegExp(/<span[^>]*(font-style:italic;font-weight:bold|font-weight:bold;font-style:italic)[^>]*>/gi),'<span class="replace-with italic bold">'],[new RegExp(/<span[^>]*font-style:italic[^>]*>/gi),'<span class="replace-with italic">'],[new RegExp(/<span[^>]*font-weight:bold[^>]*>/gi),'<span class="replace-with bold">'],[new RegExp(/&lt;(\/?)(i|b|a)&gt;/gi),"<$1$2>"],[new RegExp(/&lt;a\s+href=(&quot;|&rdquo;|&ldquo;|“|”)([^&]+)(&quot;|&rdquo;|&ldquo;|“|”)&gt;/gi),'<a href="$2">'],[new RegExp(/<\/p>\n+/gi),"</p>"],[new RegExp(/\n+<p/gi),"<p"],[new RegExp(/<\/?o:[a-z]*>/gi),""]]}i=function(a,b){this.base=a,this.options=b,(this.options.forcePlainText||this.options.cleanPastedHTML)&&this.base.subscribe("editablePaste",this.handlePaste.bind(this))},i.prototype={handlePaste:function(a,c){var d,e,f="",g="text/html",h="text/plain";if(this.options.contentWindow.clipboardData&&void 0===a.clipboardData&&(a.clipboardData=this.options.contentWindow.clipboardData,g="Text",h="Text"),a.clipboardData&&a.clipboardData.getData&&!a.defaultPrevented){if(a.preventDefault(),this.options.cleanPastedHTML&&a.clipboardData.getData(g))return this.cleanPaste(a.clipboardData.getData(g));if(this.options.disableReturn||c.getAttribute("data-disable-return"))f=b.htmlEntities(a.clipboardData.getData(h)),b.insertHTMLCommand(this.options.ownerDocument,f);else{for(d=a.clipboardData.getData(h).split(/[\r\n]/g),e=0;e<d.length;e+=1)""!==d[e]&&(f+="<p>"+b.htmlEntities(d[e])+"</p>");b.insertHTMLCommand(this.options.ownerDocument,f)}}},cleanPaste:function(c){var d,e,g,h=f.getSelectionElement(this.options.contentWindow),i=/<p|<br|<div/.test(c),j=a().concat(this.options.cleanReplacements||[]);for(d=0;d<j.length;d+=1)c=c.replace(j[d][0],j[d][1]);if(i){e=c.split("<br><br>"),this.pasteHTML("<p>"+e.join("</p><p>")+"</p>");try{this.options.ownerDocument.execCommand("insertText",!1,"\n")}catch(k){}for(e=h.querySelectorAll("a,p,div,br"),d=0;d<e.length;d+=1)switch(g=e[d],g.innerHTML=g.innerHTML.replace(/\n/gi," "),g.tagName.toLowerCase()){case"a":this.options.targetBlank&&b.setTargetBlank(g);break;case"p":case"div":this.filterCommonBlocks(g);break;case"br":this.filterLineBreak(g)}}else this.pasteHTML(c)},pasteHTML:function(a,c){c=b.defaults({},c,this.options);var d,e,f,g,h=this.options.ownerDocument.createDocumentFragment();for(h.appendChild(this.options.ownerDocument.createElement("body")),g=h.querySelector("body"),g.innerHTML=a,this.cleanupSpans(g),d=g.querySelectorAll("*"),f=0;f<d.length;f+=1)e=d[f],b.cleanupAttrs(e,c.cleanAttrs),b.cleanupTags(e,c.cleanTags);b.insertHTMLCommand(this.options.ownerDocument,g.innerHTML.replace(/&nbsp;/g," "))},isCommonBlock:function(a){return a&&("p"===a.tagName.toLowerCase()||"div"===a.tagName.toLowerCase())},filterCommonBlocks:function(a){/^\s*$/.test(a.textContent)&&a.parentNode&&a.parentNode.removeChild(a)},filterLineBreak:function(a){this.isCommonBlock(a.previousElementSibling)?this.removeWithParent(a):!this.isCommonBlock(a.parentNode)||a.parentNode.firstChild!==a&&a.parentNode.lastChild!==a?a.parentNode&&1===a.parentNode.childElementCount&&""===a.parentNode.textContent&&this.removeWithParent(a):this.removeWithParent(a)},removeWithParent:function(a){a&&a.parentNode&&(a.parentNode.parentNode&&1===a.parentNode.childElementCount?a.parentNode.parentNode.removeChild(a.parentNode):a.parentNode.removeChild(a))},cleanupSpans:function(a){var c,d,e,f=a.querySelectorAll(".replace-with"),g=function(a){return a&&"#text"!==a.nodeName&&"false"===a.getAttribute("contenteditable")};for(c=0;c<f.length;c+=1)d=f[c],e=this.options.ownerDocument.createElement(d.classList.contains("bold")?"b":"i"),e.innerHTML=d.classList.contains("bold")&&d.classList.contains("italic")?"<i>"+d.innerHTML+"</i>":d.innerHTML,d.parentNode.replaceChild(e,d);for(f=a.querySelectorAll("span"),c=0;c<f.length;c+=1){if(d=f[c],b.traverseUp(d,g))return!1;/^\s*$/.test()?d.parentNode.removeChild(d):d.parentNode.replaceChild(this.options.ownerDocument.createTextNode(d.textContent),d)}}}}();var j;!function(){function a(){this.parent=!0,this.options={name:"anchor",action:"createLink",aria:"link",tagNames:["a"],contentDefault:"<b>#</b>",contentFA:'<i class="fa fa-link"></i>'},this.name="anchor",this.hasForm=!0}a.prototype={formSaveLabel:"&#10003;",formCloseLabel:"&times;",handleClick:function(a){a.preventDefault(),a.stopPropagation();var c=f.getSelectedParentElement(b.getSelectionRange(this.base.options.ownerDocument));return c.tagName&&"a"===c.tagName.toLowerCase()?this.base.execAction("unlink"):(this.isDisplayed()||this.showForm(),!1)},getForm:function(){return this.form||(this.form=this.createForm()),this.form},getTemplate:function(){var a=['<input type="text" class="medium-editor-toolbar-input" placeholder="',this.base.options.anchorInputPlaceholder,'">'];return a.push('<a href="#" class="medium-editor-toolbar-save">',"fontawesome"===this.base.options.buttonLabels?'<i class="fa fa-check"></i>':this.formSaveLabel,"</a>"),a.push('<a href="#" class="medium-editor-toolbar-close">',"fontawesome"===this.base.options.buttonLabels?'<i class="fa fa-times"></i>':this.formCloseLabel,"</a>"),this.base.options.anchorTarget&&a.push('<input type="checkbox" class="medium-editor-toolbar-anchor-target">',"<label>",this.base.options.anchorInputCheckboxLabel,"</label>"),this.base.options.anchorButton&&a.push('<input type="checkbox" class="medium-editor-toolbar-anchor-button">',"<label>Button</label>"),a.join("")},isDisplayed:function(){return"block"===this.getForm().style.display},hideForm:function(){this.getForm().style.display="none",this.getInput().value=""},showForm:function(a){var b=this.getInput();this.base.saveSelection(),this.base.hideToolbarDefaultActions(),this.getForm().style.display="block",this.base.setToolbarPosition(),b.value=a||"",b.focus()},deactivate:function(){return this.form?(this.form.parentNode&&this.form.parentNode.removeChild(this.form),void delete this.form):!1},getFormOpts:function(){var a=this.getForm().querySelector(".medium-editor-toolbar-anchor-target"),b=this.getForm().querySelector(".medium-editor-toolbar-anchor-button"),c={url:this.getInput().value};return this.base.options.checkLinkFormat&&(c.url=this.checkLinkFormat(c.url)),c.target=a&&a.checked?"_blank":"_self",b&&b.checked&&(c.buttonClass=this.base.options.anchorButtonClass),c},doFormSave:function(){var a=this.getFormOpts();this.completeFormSave(a)},completeFormSave:function(a){this.base.restoreSelection(),this.base.createLink(a),this.base.checkSelection()},checkLinkFormat:function(a){var b=/^(https?|ftps?|rtmpt?):\/\/|mailto:/;return(b.test(a)?"":"http://")+a},doFormCancel:function(){this.base.restoreSelection(),this.base.checkSelection()},attachFormEvents:function(a){var b=a.querySelector(".medium-editor-toolbar-close"),c=a.querySelector(".medium-editor-toolbar-save"),d=a.querySelector(".medium-editor-toolbar-input");this.base.on(a,"click",this.handleFormClick.bind(this)),this.base.on(d,"keyup",this.handleTextboxKeyup.bind(this)),this.base.on(b,"click",this.handleCloseClick.bind(this)),this.base.on(c,"click",this.handleSaveClick.bind(this),!0)},createForm:function(){var a=this.base.options.ownerDocument,b=a.createElement("div");return b.className="medium-editor-toolbar-form",b.id="medium-editor-toolbar-form-anchor-"+this.base.id,b.innerHTML=this.getTemplate(),this.attachFormEvents(b),b},getInput:function(){return this.getForm().querySelector("input.medium-editor-toolbar-input")},handleTextboxKeyup:function(a){return a.keyCode===b.keyCode.ENTER?(a.preventDefault(),void this.doFormSave()):void(a.keyCode===b.keyCode.ESCAPE&&(a.preventDefault(),this.doFormCancel()))},handleFormClick:function(a){a.stopPropagation()},handleSaveClick:function(a){a.preventDefault(),this.doFormSave()},handleCloseClick:function(a){a.preventDefault(),this.doFormCancel()}},j=b.derives(h,a)}();var k;!function(){k=function(){this.parent=!0,this.name="anchor-preview"},k.prototype={previewValueSelector:"i",init:function(a){this.base=a,this.anchorPreview=this.createPreview(),this.base.options.elementsContainer.appendChild(this.anchorPreview),this.attachToEditables()},getPreviewElement:function(){return this.anchorPreview},createPreview:function(){var a=this.base.options.ownerDocument.createElement("div");return a.id="medium-editor-anchor-preview-"+this.base.id,a.className="medium-editor-anchor-preview",a.innerHTML=this.getTemplate(),this.base.on(a,"click",this.handleClick.bind(this)),
a},getTemplate:function(){return'<div class="medium-editor-toolbar-anchor-preview" id="medium-editor-toolbar-anchor-preview"> <i class="medium-editor-toolbar-anchor-preview-inner"></i></div>'},deactivate:function(){this.anchorPreview&&(this.anchorPreview.parentNode&&this.anchorPreview.parentNode.removeChild(this.anchorPreview),delete this.anchorPreview)},hidePreview:function(){this.anchorPreview.classList.remove("medium-editor-anchor-preview-active"),this.activeAnchor=null},showPreview:function(a){return this.anchorPreview.classList.contains("medium-editor-anchor-preview-active")||a.getAttribute("data-disable-preview")?!0:(this.previewValueSelector&&(this.anchorPreview.querySelector(this.previewValueSelector).textContent=a.attributes.href.value),this.anchorPreview.classList.add("medium-toolbar-arrow-over"),this.anchorPreview.classList.remove("medium-toolbar-arrow-under"),this.anchorPreview.classList.contains("medium-editor-anchor-preview-active")||this.anchorPreview.classList.add("medium-editor-anchor-preview-active"),this.activeAnchor=a,this.positionPreview(),this.attachPreviewHandlers(),this)},positionPreview:function(){var a,b,c=40,d=this.activeAnchor.getBoundingClientRect(),e=(d.left+d.right)/2;a=this.anchorPreview.offsetWidth/2,b=this.base.options.diffLeft-a,this.anchorPreview.style.top=Math.round(c+d.bottom-this.base.options.diffTop+this.base.options.contentWindow.pageYOffset-this.anchorPreview.offsetHeight)+"px",this.anchorPreview.style.left=a>e?b+a+"px":this.base.options.contentWindow.innerWidth-e<a?this.base.options.contentWindow.innerWidth+b-a+"px":b+e+"px"},attachToEditables:function(){this.base.subscribe("editableMouseover",this.handleEditableMouseover.bind(this))},handleClick:function(){var a,b,c=this.base.getExtensionByName("anchor"),d=this.activeAnchor;c&&d&&(a=this.base.options.ownerDocument.createRange(),a.selectNodeContents(this.activeAnchor),b=this.base.options.contentWindow.getSelection(),b.removeAllRanges(),b.addRange(a),this.base.delay(function(){d&&(c.showForm(d.attributes.href.value),d=null)}.bind(this))),this.hidePreview()},handleAnchorMouseout:function(){this.anchorToPreview=null,this.base.off(this.activeAnchor,"mouseout",this.instance_handleAnchorMouseout),this.instance_handleAnchorMouseout=null},handleEditableMouseover:function(a){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.base.toolbar&&this.base.toolbar.isDisplayed())return!0;this.activeAnchor&&this.activeAnchor!==a.target&&this.detachPreviewHandlers(),this.anchorToPreview=a.target,this.instance_handleAnchorMouseout=this.handleAnchorMouseout.bind(this),this.base.on(this.anchorToPreview,"mouseout",this.instance_handleAnchorMouseout),this.base.delay(function(){this.anchorToPreview&&this.showPreview(this.anchorToPreview)}.bind(this))}},handlePreviewMouseover:function(){this.lastOver=(new Date).getTime(),this.hovering=!0},handlePreviewMouseout:function(a){a.relatedTarget&&/anchor-preview/.test(a.relatedTarget.className)||(this.hovering=!1)},updatePreview:function(){if(this.hovering)return!0;var a=(new Date).getTime()-this.lastOver;a>this.base.options.anchorPreviewHideDelay&&this.detachPreviewHandlers()},detachPreviewHandlers:function(){clearInterval(this.interval_timer),this.instance_handlePreviewMouseover&&(this.base.off(this.anchorPreview,"mouseover",this.instance_handlePreviewMouseover),this.base.off(this.anchorPreview,"mouseout",this.instance_handlePreviewMouseout),this.activeAnchor&&(this.base.off(this.activeAnchor,"mouseover",this.instance_handlePreviewMouseover),this.base.off(this.activeAnchor,"mouseout",this.instance_handlePreviewMouseout))),this.hidePreview(),this.hovering=this.instance_handlePreviewMouseover=this.instance_handlePreviewMouseout=null},attachPreviewHandlers:function(){this.lastOver=(new Date).getTime(),this.hovering=!0,this.instance_handlePreviewMouseover=this.handlePreviewMouseover.bind(this),this.instance_handlePreviewMouseout=this.handlePreviewMouseout.bind(this),this.interval_timer=setInterval(this.updatePreview.bind(this),200),this.base.on(this.anchorPreview,"mouseover",this.instance_handlePreviewMouseover),this.base.on(this.anchorPreview,"mouseout",this.instance_handlePreviewMouseout),this.base.on(this.activeAnchor,"mouseover",this.instance_handlePreviewMouseover),this.base.on(this.activeAnchor,"mouseout",this.instance_handlePreviewMouseout)}}}();var l;!function(){l=function(a){this.base=a,this.options=a.options,this.initThrottledMethods()},l.prototype={createToolbar:function(){var a=this.base.options.ownerDocument.createElement("div");return a.id="medium-editor-toolbar-"+this.base.id,a.className="medium-editor-toolbar",a.className+=this.options.staticToolbar?" static-toolbar":" stalker-toolbar",a.appendChild(this.createToolbarButtons()),this.base.commands.forEach(function(b){b.hasForm&&a.appendChild(b.getForm())}),this.attachEventHandlers(),this.base.subscribe("externalInteraction",this.handleBlur.bind(this)),a},createToolbarButtons:function(){var a,c,d,e=this.base.options.ownerDocument.createElement("ul");return e.id="medium-editor-toolbar-actions"+this.base.id,e.className="medium-editor-toolbar-actions clearfix",e.style.display="block",this.base.commands.forEach(function(d){"function"==typeof d.getButton&&(c=d.getButton(this.base),a=this.base.options.ownerDocument.createElement("li"),b.isElement(c)?a.appendChild(c):a.innerHTML=c,e.appendChild(a))}.bind(this)),d=e.querySelectorAll("button"),d.length>0&&(d[0].classList.add(this.options.firstButtonClass),d[d.length-1].classList.add(this.options.lastButtonClass)),e},deactivate:function(){this.toolbar&&(this.toolbar.parentNode&&this.toolbar.parentNode.removeChild(this.toolbar),delete this.toolbar)},getToolbarElement:function(){return this.toolbar||(this.toolbar=this.createToolbar()),this.toolbar},getToolbarActionsElement:function(){return this.getToolbarElement().querySelector(".medium-editor-toolbar-actions")},initThrottledMethods:function(){this.throttledPositionToolbar=b.throttle(function(){this.base.isActive&&this.positionToolbarIfShown()}.bind(this))},attachEventHandlers:function(){this.base.on(this.options.ownerDocument.documentElement,"mousedown",this.handleDocumentMousedown.bind(this)),this.base.on(this.options.ownerDocument.documentElement,"mouseup",this.handleDocumentMouseup.bind(this)),this.options.staticToolbar&&this.options.stickyToolbar&&this.base.on(this.options.contentWindow,"scroll",this.handleWindowScroll.bind(this),!0),this.base.on(this.options.contentWindow,"resize",this.handleWindowResize.bind(this)),this.base.elements.forEach(function(a){this.base.on(a,"click",this.handleEditableClick.bind(this)),this.base.on(a,"keyup",this.handleEditableKeyup.bind(this)),this.base.on(a,"blur",this.handleEditableBlur.bind(this))},this)},handleWindowScroll:function(){this.positionToolbarIfShown()},handleWindowResize:function(){this.throttledPositionToolbar()},handleDocumentMousedown:function(a){this.lastMousedownTarget=a.target},handleDocumentMouseup:function(a){return this.lastMousedownTarget=null,a&&a.target&&b.isDescendant(this.getToolbarElement(),a.target)?!1:void this.checkState()},handleEditableClick:function(){setTimeout(function(){this.checkState()}.bind(this),0)},handleEditableKeyup:function(){this.checkState()},handleEditableBlur:function(a){var c=!1,d=a&&a.relatedTarget?a.relatedTarget:this.lastMousedownTarget;return b.isDescendant(this.getToolbarElement(),d)?!1:(d&&(this.base.elements.forEach(function(a){c=c||b.isDescendant(a,d)||d===a},this),c||this.options.contentWindow.getSelection().removeAllRanges()),void this.checkState())},handleBlur:function(){setTimeout(function(){this.hideToolbar()}.bind(this),0)},isDisplayed:function(){return this.getToolbarElement().classList.contains("medium-editor-toolbar-active")},showToolbar:function(){this.isDisplayed()||(this.getToolbarElement().classList.add("medium-editor-toolbar-active"),"function"==typeof this.options.onShowToolbar&&this.options.onShowToolbar())},hideToolbar:function(){this.isDisplayed()&&(this.base.commands.forEach(function(a){"function"==typeof a.onHide&&a.onHide()}),this.getToolbarElement().classList.remove("medium-editor-toolbar-active"),"function"==typeof this.options.onHideToolbar&&this.options.onHideToolbar())},isToolbarDefaultActionsDisplayed:function(){return"block"===this.getToolbarActionsElement().style.display},hideToolbarDefaultActions:function(){this.isToolbarDefaultActionsDisplayed()&&(this.getToolbarActionsElement().style.display="none")},showToolbarDefaultActions:function(){this.hideExtensionForms(),this.isToolbarDefaultActionsDisplayed()||(this.getToolbarActionsElement().style.display="block"),this.base.delay(function(){this.showToolbar()}.bind(this))},hideExtensionForms:function(){this.base.commands.forEach(function(a){a.hasForm&&a.isDisplayed()&&a.hideForm()})},multipleBlockElementsSelected:function(){var a=f.getSelectionHtml.call(this).replace(/<[\S]+><\/[\S]+>/gim,""),b=a.match(/<(p|h[1-6]|blockquote)[^>]*>/g);return!!b&&b.length>1},checkSelectionElement:function(a,c){var d,e,g,h=0,i=a.getRangeAt(0);if(this.options.standardizeSelectionStart&&i.startContainer.nodeValue&&i.startOffset===i.startContainer.nodeValue.length&&(e=b.findAdjacentTextNodeWithContent(f.getSelectionElement(this.options.contentWindow),i.startContainer,this.options.ownerDocument))){for(h=0;0===e.nodeValue.substr(h,1).trim().length;)h+=1;g=this.options.ownerDocument.createRange(),g.setStart(e,h),g.setEnd(i.endContainer,i.endOffset),a.removeAllRanges(),a.addRange(g),i=g}for(d=0;d<this.base.elements.length;d+=1)if(this.base.elements[d]===c)return void this.showAndUpdateToolbar();this.options.staticToolbar||this.hideToolbar()},checkState:function(){var a,b;this.base.preventSelectionUpdates||(a=this.options.contentWindow.getSelection(),!this.options.updateOnEmptySelection&&""===a.toString().trim()||this.options.allowMultiParagraphSelection===!1&&this.multipleBlockElementsSelected()||f.selectionInContentEditableFalse(this.options.contentWindow)?this.options.staticToolbar?this.showAndUpdateToolbar():this.hideToolbar():(b=f.getSelectionElement(this.options.contentWindow),!b||b.getAttribute("data-disable-toolbar")?this.options.staticToolbar||this.hideToolbar():this.checkSelectionElement(a,b)))},showAndUpdateToolbar:function(){this.setToolbarButtonStates(),this.showToolbarDefaultActions(),this.setToolbarPosition()},setToolbarButtonStates:function(){this.base.commands.forEach(function(a){"function"==typeof a.isActive&&a.setInactive()}.bind(this)),this.checkActiveButtons()},checkActiveButtons:function(){var a,c=[],d=null,e=b.getSelectionRange(this.options.ownerDocument),g=function(b){"function"==typeof b.checkState?b.checkState(a):"function"==typeof b.isActive&&"function"==typeof b.isAlreadyApplied&&!b.isActive()&&b.isAlreadyApplied(a)&&b.setActive()};if(e)for(a=f.getSelectedParentElement(e),this.base.commands.forEach(function(a){return"function"==typeof a.queryCommandState&&(d=a.queryCommandState(),null!==d)?void(d&&a.setActive()):void c.push(a)});void 0!==a.tagName&&-1===b.parentElements.indexOf(a.tagName.toLowerCase)&&(c.forEach(g),-1===this.base.elements.indexOf(a));)a=a.parentNode},positionToolbarIfShown:function(){this.isDisplayed()&&this.setToolbarPosition()},setToolbarPosition:function(){var a,b=f.getSelectionElement(this.options.contentWindow),c=this.options.contentWindow.getSelection();return b&&this.options.contentWindow.getSelection().focusNode?-1===this.base.elements.indexOf(b)?this:(this.options.staticToolbar?(this.showToolbar(),this.positionStaticToolbar(b)):c.isCollapsed||(this.showToolbar(),this.positionToolbar(c)),a=this.base.getExtensionByName("anchor-preview"),void(a&&"function"==typeof a.hidePreview&&a.hidePreview())):this},positionStaticToolbar:function(a){this.getToolbarElement().style.left="0";var b,c=this.options.ownerDocument.documentElement&&this.options.ownerDocument.documentElement.scrollTop||this.options.ownerDocument.body.scrollTop,d=this.options.contentWindow.innerWidth,e=this.getToolbarElement(),f=a.getBoundingClientRect(),g=f.top+c,h=f.left+f.width/2,i=e.offsetHeight,j=e.offsetWidth,k=j/2;this.options.stickyToolbar?c>g+a.offsetHeight-i?(e.style.top=g+a.offsetHeight-i+"px",e.classList.remove("sticky-toolbar")):c>g-i?(e.classList.add("sticky-toolbar"),e.style.top="0px"):(e.classList.remove("sticky-toolbar"),e.style.top=g-i+"px"):e.style.top=g-i+"px","left"===this.options.toolbarAlign?b=f.left:"center"===this.options.toolbarAlign?b=h-k:"right"===this.options.toolbarAlign&&(b=f.right-j),0>b?b=0:b+j>d&&(b=d-j),e.style.left=b+"px"},positionToolbar:function(a){this.getToolbarElement().style.left="0";var b=this.options.contentWindow.innerWidth,c=a.getRangeAt(0),d=c.getBoundingClientRect(),e=(d.left+d.right)/2,f=this.getToolbarElement(),g=f.offsetHeight,h=f.offsetWidth,i=h/2,j=50,k=this.options.diffLeft-i;d.top<j?(f.classList.add("medium-toolbar-arrow-over"),f.classList.remove("medium-toolbar-arrow-under"),f.style.top=j+d.bottom-this.options.diffTop+this.options.contentWindow.pageYOffset-g+"px"):(f.classList.add("medium-toolbar-arrow-under"),f.classList.remove("medium-toolbar-arrow-over"),f.style.top=d.top+this.options.diffTop+this.options.contentWindow.pageYOffset-g+"px"),f.style.left=i>e?k+i+"px":i>b-e?b+k-i+"px":k+e+"px"}}}();var m;!function(){m=function(a){this.base=a,this.initPlaceholders(),this.attachEventHandlers()},m.prototype={initPlaceholders:function(){this.base.elements.forEach(function(a){this.updatePlaceholder(a)},this)},showPlaceholder:function(a){a&&a.classList.add("medium-editor-placeholder")},hidePlaceholder:function(a){a&&a.classList.remove("medium-editor-placeholder")},updatePlaceholder:function(a){a.querySelector("img")||a.querySelector("blockquote")||""!==a.textContent.replace(/^\s+|\s+$/g,"")?this.hidePlaceholder(a):this.showPlaceholder(a)},attachEventHandlers:function(){this.base.subscribe("externalInteraction",this.handleExternalInteraction.bind(this)),this.base.subscribe("editableBlur",this.handleBlur.bind(this)),this.base.subscribe("editableClick",this.handleHidePlaceholderEvent.bind(this)),this.base.subscribe("editableKeypress",this.handleHidePlaceholderEvent.bind(this)),this.base.subscribe("editablePaste",this.handleHidePlaceholderEvent.bind(this))},handleHidePlaceholderEvent:function(a,b){this.hidePlaceholder(b)},handleBlur:function(a,b){this.updatePlaceholder(b)},handleExternalInteraction:function(){this.initPlaceholders()}}}();var n;return function(){n={}}(),function(){function o(a,c){if(this.options.disableReturn||c.getAttribute("data-disable-return"))a.preventDefault();else if(this.options.disableDoubleReturn||this.getAttribute("data-disable-double-return")){var d=b.getSelectionStart(this.options.ownerDocument);d&&""===d.textContent.trim()&&a.preventDefault()}}function p(a){var c=b.getSelectionStart(this.options.ownerDocument),d=c&&c.tagName.toLowerCase();"pre"===d&&(a.preventDefault(),b.insertHTMLCommand(this.options.ownerDocument," ")),b.isListItem(c)&&(a.preventDefault(),a.shiftKey?this.options.ownerDocument.execCommand("outdent",!1,null):this.options.ownerDocument.execCommand("indent",!1,null))}function q(a){var c,d,e,g=b.getSelectionStart(this.options.ownerDocument),h=g.tagName.toLowerCase(),i=/^(\s+|<br\/?>)?$/i,j=/h\d/i;(a.which===b.keyCode.BACKSPACE||a.which===b.keyCode.ENTER)&&g.previousElementSibling&&j.test(h)&&0===f.getCaretOffsets(g).left?a.which===b.keyCode.BACKSPACE&&i.test(g.previousElementSibling.innerHTML)?(g.previousElementSibling.parentNode.removeChild(g.previousElementSibling),a.preventDefault()):a.which===b.keyCode.ENTER&&(e=this.options.ownerDocument.createElement("p"),e.innerHTML="<br>",g.previousElementSibling.parentNode.insertBefore(e,g),a.preventDefault()):a.which===b.keyCode.DELETE&&g.nextElementSibling&&g.previousElementSibling&&!j.test(h)&&i.test(g.innerHTML)&&j.test(g.nextElementSibling.tagName)?(c=this.options.ownerDocument.createRange(),d=this.options.ownerDocument.getSelection(),c.setStart(g.nextElementSibling,0),c.collapse(!0),d.removeAllRanges(),d.addRange(c),g.previousElementSibling.parentNode.removeChild(g),a.preventDefault()):a.which!==b.keyCode.BACKSPACE||"li"!==h||!i.test(g.innerHTML)||g.previousElementSibling||g.parentElement.previousElementSibling||"li"!==g.nextElementSibling.tagName.toLowerCase()||(e=this.options.ownerDocument.createElement("p"),e.innerHTML="<br>",g.parentElement.parentElement.insertBefore(e,g.parentElement),c=this.options.ownerDocument.createRange(),d=this.options.ownerDocument.getSelection(),c.setStart(e,0),c.collapse(!0),d.removeAllRanges(),d.addRange(c),g.parentElement.removeChild(g),a.preventDefault())}function r(a){var b="medium-editor-dragover";a.preventDefault(),a.dataTransfer.dropEffect="copy","dragover"===a.type?a.target.classList.add(b):"dragleave"===a.type&&a.target.classList.remove(b)}function s(a){var c,d="medium-editor-dragover";a.preventDefault(),a.stopPropagation(),a.dataTransfer.files&&(c=Array.prototype.slice.call(a.dataTransfer.files,0),c.some(function(a){if(a.type.match("image")){var c,d;c=new FileReader,c.readAsDataURL(a),d="medium-img-"+ +new Date,b.insertHTMLCommand(this.options.ownerDocument,'<img class="medium-image-loading" id="'+d+'" />'),c.onload=function(){var a=this.options.ownerDocument.getElementById(d);a&&(a.removeAttribute("id"),a.removeAttribute("class"),a.src=c.result)}.bind(this)}}.bind(this))),a.target.classList.remove(d)}function t(a){var c,d=b.getSelectionStart(this.options.ownerDocument);d&&(d.getAttribute("data-medium-element")&&0===d.children.length&&this.options.ownerDocument.execCommand("formatBlock",!1,"p"),a.which!==b.keyCode.ENTER||b.isListItem(d)||(c=d.tagName.toLowerCase(),"a"===c?this.options.ownerDocument.execCommand("unlink",!1,null):a.shiftKey||/h\d/.test(c)||this.options.ownerDocument.execCommand("formatBlock",!1,"p")))}function u(a){a||(a=[]),"string"==typeof a&&(a=this.options.ownerDocument.querySelectorAll(a)),b.isElement(a)&&(a=[a]),this.elements=Array.prototype.slice.apply(a)}function v(a,b,c){return a.parent&&(a.base=c),"function"==typeof a.init&&a.init(c),a.name||(a.name=b),a}function w(){var a,b=!1;if(this.options.disableAnchorPreview)return!1;if(this.options.extensions["anchor-preview"])return!1;if(this.options.disableToolbar)return!1;for(a=0;a<this.elements.length;a+=1)if(!this.elements[a].getAttribute("data-disable-toolbar")){b=!0;break}return b}function x(a){var b=this.options.ownerDocument.createElement("div"),c=+new Date,d=this.elements[a];return b.className=d.className,b.id=c,b.innerHTML=d.value,d.classList.add("medium-editor-hidden"),d.parentNode.insertBefore(b,d),this.on(b,"input",function(){d.value=this.serialize()[c].value}.bind(this)),b}function y(){var a,b=!1;for(a=0;a<this.elements.length;a+=1)this.options.disableEditing||this.elements[a].getAttribute("data-disable-editing")||("textarea"===this.elements[a].tagName.toLowerCase()&&(this.elements[a]=x.call(this,a)),this.elements[a].setAttribute("contentEditable",!0)),this.elements[a].getAttribute("data-placeholder")||this.elements[a].setAttribute("data-placeholder",this.options.placeholder),this.elements[a].setAttribute("data-medium-element",!0),this.elements[a].setAttribute("role","textbox"),this.elements[a].setAttribute("aria-multiline",!0),this.options.disableToolbar||this.elements[a].getAttribute("data-disable-toolbar")||(b=!0);!this.toolbar&&b&&(this.toolbar=new l(this),this.options.elementsContainer.appendChild(this.toolbar.getToolbarElement()))}function z(){var a;if(this.subscribe("editableKeydownTab",p.bind(this)),this.subscribe("editableKeydownDelete",q.bind(this)),this.subscribe("editableKeydownEnter",q.bind(this)),this.options.disableReturn||this.options.disableDoubleReturn)this.subscribe("editableKeydownEnter",o.bind(this));else for(a=0;a<this.elements.length;a+=1)if(this.elements[a].getAttribute("data-disable-return")||this.elements[a].getAttribute("data-disable-double-return")){this.subscribe("editableKeydownEnter",o.bind(this));break}this.options.disableReturn||this.elements.forEach(function(a){a.getAttribute("data-disable-return")||this.on(a,"keyup",t.bind(this))},this),this.options.imageDragging&&(this.subscribe("editableDrag",r.bind(this)),this.subscribe("editableDrop",s.bind(this)))}function A(){var a=b.extend({},this.options.paste,{forcePlainText:this.options.forcePlainText,cleanPastedHtml:this.options.cleanPastedHtml,disableReturn:this.options.disableReturn,targetBlank:this.options.targetBlank,contentWindow:this.options.contentWindow,ownerDocument:this.options.ownerDocument});this.pasteHandler=new i(this,a)}function B(){var a,b,d=this.options.buttons,e=this.options.extensions;this.commands=[],d.forEach(function(b){e[b]?(a=v(e[b],b,this),this.commands.push(a)):"anchor"===b?(a=v(new j,b,this),this.commands.push(a)):c.hasOwnProperty(b)&&(a=new h(c[b],this),this.commands.push(a))},this);for(b in e)e.hasOwnProperty(b)&&-1===d.indexOf(b)&&(a=v(e[b],b,this));w.call(this)&&this.commands.push(v(new k,"anchor-preview",this))}function C(a,c){c&&[["forcePlainText","paste.forcePlainText"],["cleanPastedHtml","paste.cleanPastedHtml"]].forEach(function(a){c.hasOwnProperty(a[0])&&void 0!==c[a[0]]&&b.deprecated(a[0],a[1])});var d=["paste"],e=b.extend({},c);return d.forEach(function(c){e[c]=e[c]?b.defaults({},e[c],a[c]):a[c]}),b.defaults(e,a)}function D(a,c){var d,e=/^append-(.+)$/gi;return d=e.exec(a),d?b.execFormatBlock(this.options.ownerDocument,d[1]):"createLink"===a?this.createLink(c):"image"===a?this.options.ownerDocument.execCommand("insertImage",!1,this.options.contentWindow.getSelection()):this.options.ownerDocument.execCommand(a,!1,null)}a.statics={ButtonsData:c,DefaultButton:h,AnchorExtension:j,Toolbar:l,AnchorPreview:k},a.Extension=e,a.extensions=n,a.util=b,a.selection=f,a.prototype={defaults:d,init:function(a,b){var c=1;if(this.options=C.call(this,this.defaults,b),u.call(this,a),0!==this.elements.length){for(this.options.elementsContainer||(this.options.elementsContainer=this.options.ownerDocument.body);this.options.elementsContainer.querySelector("#medium-editor-toolbar-"+c);)c+=1;return this.id=c,this.setup()}},setup:function(){this.isActive||(this.events=new g(this),this.isActive=!0,B.call(this),y.call(this),z.call(this),A.call(this),this.options.disablePlaceholders||(this.placeholders=new m(this)))},destroy:function(){if(this.isActive){var a;for(this.isActive=!1,void 0!==this.toolbar&&(this.toolbar.deactivate(),delete this.toolbar),a=0;a<this.elements.length;a+=1)this.elements[a].removeAttribute("contentEditable"),this.elements[a].removeAttribute("data-medium-element");this.commands.forEach(function(a){"function"==typeof a.deactivate&&a.deactivate()},this),this.events.detachAllDOMEvents()}},on:function(a,b,c,d){this.events.attachDOMEvent(a,b,c,d)},off:function(a,b,c,d){this.events.detachDOMEvent(a,b,c,d)},subscribe:function(a,b){this.events.attachCustomEvent(a,b)},delay:function(a){var b=this;setTimeout(function(){b.isActive&&a()},this.options.delay)},serialize:function(){var a,b,c={};for(a=0;a<this.elements.length;a+=1)b=""!==this.elements[a].id?this.elements[a].id:"element-"+a,c[b]={value:this.elements[a].innerHTML.trim()};return c},getExtensionByName:function(a){var b;return this.commands&&this.commands.length&&this.commands.some(function(c){return c.name===a?(b=c,!0):!1}),b},callExtensions:function(a){if(!(arguments.length<1)){var b,c,d=Array.prototype.slice.call(arguments,1);for(c in this.options.extensions)this.options.extensions.hasOwnProperty(c)&&(b=this.options.extensions[c],void 0!==b[a]&&b[a].apply(b,d));return this}},stopSelectionUpdates:function(){this.preventSelectionUpdates=!0},startSelectionUpdates:function(){this.preventSelectionUpdates=!1},checkSelection:function(){return this.toolbar&&this.toolbar.checkState(),this},queryCommandState:function(a){var b,c=/^full-(.+)$/gi,d=null;b=c.exec(a),b&&(a=b[1]);try{d=this.options.ownerDocument.queryCommandState(a)}catch(e){d=null}return d},execAction:function(a,c){var d,e,f=/^full-(.+)$/gi;return d=f.exec(a),d?(this.saveSelection(),this.selectAllContents(),e=D.call(this,d[1],c),this.restoreSelection()):e=D.call(this,a,c),("insertunorderedlist"===a||"insertorderedlist"===a)&&b.cleanListDOM(this.getSelectedParentElement()),this.checkSelection(),e},getSelectedParentElement:function(a){return void 0===a&&(a=this.options.contentWindow.getSelection().getRangeAt(0)),f.getSelectedParentElement(a)},hideToolbarDefaultActions:function(){return this.toolbar&&this.toolbar.hideToolbarDefaultActions(),this},setToolbarPosition:function(){this.toolbar&&this.toolbar.setToolbarPosition()},selectAllContents:function(){var a=this.options.ownerDocument.createRange(),b=this.options.contentWindow.getSelection(),c=f.getSelectionElement(this.options.contentWindow);if(c){for(;1===c.children.length;)c=c.children[0];a.selectNodeContents(c),b.removeAllRanges(),b.addRange(a)}},saveSelection:function(){this.selectionState=null;var a,c,d,e=this.options.contentWindow.getSelection(),f=-1;e.rangeCount>0&&(a=e.getRangeAt(0),c=a.cloneRange(),this.elements.some(function(c,d){return c===a.startContainer||b.isDescendant(c,a.startContainer)?(f=d,!0):!1}),f>-1&&(c.selectNodeContents(this.elements[f]),c.setEnd(a.startContainer,a.startOffset),d=c.toString().length,this.selectionState={start:d,end:d+a.toString().length,editableElementIndex:f}))},restoreSelection:function(){if(this.selectionState){var a,b,c,d,e=this.elements[this.selectionState.editableElementIndex],f=0,g=this.options.ownerDocument.createRange(),h=[e],i=!1,j=!1;for(g.setStart(e,0),g.collapse(!0),a=h.pop();!j&&a;){if(3===a.nodeType)d=f+a.length,!i&&this.selectionState.start>=f&&this.selectionState.start<=d&&(g.setStart(a,this.selectionState.start-f),i=!0),i&&this.selectionState.end>=f&&this.selectionState.end<=d&&(g.setEnd(a,this.selectionState.end-f),j=!0),f=d;else for(b=a.childNodes.length-1;b>=0;)h.push(a.childNodes[b]),b-=1;j||(a=h.pop())}c=this.options.contentWindow.getSelection(),c.removeAllRanges(),c.addRange(g)}},createLink:function(a){var c,d;if(a.url&&a.url.trim().length>0&&(this.options.ownerDocument.execCommand("createLink",!1,a.url),(this.options.targetBlank||"_blank"===a.target)&&b.setTargetBlank(b.getSelectionStart(this.options.ownerDocument)),a.buttonClass&&b.addClassToAnchors(b.getSelectionStart(this.options.ownerDocument),a.buttonClass)),this.options.targetBlank||"_blank"===a.target||a.buttonClass)for(c=this.options.ownerDocument.createEvent("HTMLEvents"),c.initEvent("input",!0,!0,this.options.contentWindow),d=0;d<this.elements.length;d+=1)this.elements[d].dispatchEvent(c)},activate:function(){b.deprecatedMethod.call(this,"activate","setup",arguments)},deactivate:function(){b.deprecatedMethod.call(this,"deactivate","destroy",arguments)},cleanPaste:function(a){this.pasteHandler.cleanPaste(a)},pasteHTML:function(a,b){this.pasteHandler.pasteHTML(a,b)}}}(),a.version=function(a,b,c){return{major:parseInt(a,10),minor:parseInt(b,10),revision:parseInt(c,10),toString:function(){return[a,b,c].join(".")}}}.apply(this,{version:"4.3.0"}.version.split(".")),a}());

@@ -17,2 +17,5 @@ /*global module, require, process*/

'src/js/util.js',
'src/js/defaults/buttons.js',
'src/js/defaults/options.js',
'src/js/extension.js',
'src/js/selection.js',

@@ -26,2 +29,4 @@ 'src/js/events.js',

'src/js/placeholders.js',
'src/js/defaults/options.js',
'src/js/defaults/extensions.js',
'src/js/core.js',

@@ -91,2 +96,3 @@ 'src/js/version.js'

vendor: [
'node_modules/lodash/index.js',
'spec/vendor/jasmine-jsreporter.js',

@@ -93,0 +99,0 @@ 'spec/vendor/jasmine-jsreporter-script.js'

{
"name": "medium-editor",
"version": "4.2.0",
"version": "4.3.0",
"author": "Davi Ferreira <hi@daviferreira.com>",

@@ -48,3 +48,3 @@ "contributors": [

"grunt-contrib-jshint": "^0.11.1",
"grunt-contrib-uglify": "~0.8.0",
"grunt-contrib-uglify": "~0.9.0",
"grunt-contrib-watch": "~0.6.1",

@@ -58,2 +58,3 @@ "grunt-coveralls": "^1.0.0",

"load-grunt-tasks": "^3.1.0",
"lodash": "~3.6.0",
"time-grunt": "^1.0.0"

@@ -60,0 +61,0 @@ },

@@ -74,3 +74,2 @@ # MediumEditor

* __allowMultiParagraphSelection__: enables the toolbar when selecting multiple paragraphs/block elements. Default: true
* __cleanPastedHTML__: cleans pasted content from different sources, like google docs etc. Default: false
* __delay__: time in milliseconds to show the toolbar or anchor tag preview. Default: 0

@@ -85,3 +84,2 @@ * __disableAnchorPreview__: enables/disables the anchor preview element, which appears when hovering links and allows the user to edit the link when clicking. If toolbar is diabled (via __disableToolbar__ or `data-disable-toolbar attribute`) the anchor preview is always disabled so this option will be ignored. Default: false

* __firstHeader__: HTML tag to be used as first header. Default: h3
* __forcePlainText__: Forces pasting as plain text. Default: true
* __imageDragging__: Allows image drag and drop into the editor. Default: true

@@ -118,4 +116,26 @@ * __placeholder__: Defines the default placeholder for empty contenteditables when __disablePlaceholders__ is not set to true. You can overwrite it by setting a data-placeholder attribute on your elements. Default: 'Type your text'

Example:
### Paste Options
Options for paste are passed as an object that is a member of the outer options object. Example:
```javascript
var editor = new MediumEditor('.editable', {
buttons: ['bold', 'italic', 'quote'],
paste: {
// This example includes the default options for paste, if nothing is passed this is what it used
forcePlainText: true,
cleanPastedHtml: false,
cleanReplacements: [],
cleanAttrs: ['class', 'style', 'dir']
cleanTags: ['meta']
}
});
```
* __forcePlainText__: Forces pasting as plain text. Default: true
* __cleanPastedHtml__: cleans pasted content from different sources, like google docs etc. Default: false
* __cleanReplacements__: custom pairs (2 element arrays) of RegExp and replacement text to use during paste when __forcePlainText__ or __cleanPastedHtml__ are `true` OR when calling `cleanPaste(text)` helper method. Default: []
* __cleanAttrs__: list of attributes to remove when ... default: ['class', 'style', 'dir']
* __cleanTags__: list of element tag names to remove... default: ['meta']
### Options Example:
```javascript

@@ -130,3 +150,8 @@ var editor = new MediumEditor('.editable', {

delay: 1000,
targetBlank: true
targetBlank: true,
paste: {
cleanPastedHtml: true,
cleanAttrs: ['style', 'dir']
cleanTags: ['label', 'meta']
}
});

@@ -178,3 +203,3 @@ ```

* __.on(target, event, listener, useCapture)__: attach a listener to a DOM event which will be detached when MediumEditor is deactivated
* __.off(target, event, listener, useCapture)__: detach a listener to a DOM even that was attached via `on()`
* __.off(target, event, listener, useCapture)__: detach a listener to a DOM event that was attached via `on()`
* __.delay(fn)__: delay any function from being executed by the amount of time passed as the `delay` option

@@ -223,2 +248,4 @@ * __.getSelectionParentElement(range)__: get the parent contenteditable element that contains the current selection

[Kill some bugs :)](https://github.com/daviferreira/medium-editor/issues?q=is%3Aopen+is%3Aissue+label%3Abug)
1. Fork it

@@ -225,0 +252,0 @@ 2. Create your feature branch (`git checkout -b my-new-feature`)

@@ -579,2 +579,24 @@ /*global MediumEditor, describe, it, expect, spyOn,

describe('Justify', function () {
it('button should be activated based on text-align values', function () {
this.el.innerHTML = '<div><p id="justify-para-one">lorem ipsum</p></div>';
document.body.style.setProperty('text-align', 'center');
try {
var editor = new MediumEditor('.editor', {
buttons: ['justifyCenter', 'justifyRight']
}),
rightButton = editor.toolbar.getToolbarElement().querySelector('[data-action="justifyRight"]'),
centerButton = editor.toolbar.getToolbarElement().querySelector('[data-action="justifyCenter"]');
selectElementContentsAndFire(document.getElementById('justify-para-one'));
expect(rightButton.classList.contains('medium-editor-button-active')).toBe(false);
expect(centerButton.classList.contains('medium-editor-button-active')).toBe(true);
fireEvent(rightButton, 'click');
expect(rightButton.classList.contains('medium-editor-button-active')).toBe(true);
expect(centerButton.classList.contains('medium-editor-button-active')).toBe(false);
} finally {
document.body.style.removeProperty('text-align');
}
});
it('buttons should deactivate other justify buttons', function () {

@@ -581,0 +603,0 @@ this.el.innerHTML = '<p id="justify-para-one">lorem ipsum</p>' +

/*global MediumEditor, describe, it, expect, spyOn,
afterEach, beforeEach, jasmine, tearDown,
selectElementContentsAndFire */
selectElementContentsAndFire, Extension */

@@ -89,2 +89,49 @@ describe('Extensions TestCase', function () {

describe('Core Extension', function () {
it("exists", function(){
expect(MediumEditor.Extension).toBeTruthy();
expect(MediumEditor.Extension).toBe(Extension);
});
it("provides an .extend method", function() {
expect(Extension.extend).toBeTruthy();
var Extended = Extension.extend({
foo: "bar"
});
expect(Extended.prototype.foo).toBe("bar");
expect(Extended.extend).toBe(Extension.extend);
});
it("can be passed as an extension", function(){
var Sub, editor, e1, e2;
Sub = Extension.extend({
parent: true,
y: 10
});
e1 = new Sub();
e2 = new Sub({ y: 20 });
spyOn(e1, "init");
editor = new MediumEditor(".editor", {
extensions: {
"foo": e1,
"bar": e2
}
});
expect(e1.y).toBe(10);
expect(e2.y).toBe(20);
expect(e1.init).toHaveBeenCalledWith(editor);
});
});
describe('Button integration', function () {

@@ -91,0 +138,0 @@

/*global MediumEditor, describe, it, expect, spyOn,
afterEach, beforeEach, tearDown*/
afterEach, beforeEach, tearDown, _ */

@@ -113,4 +113,2 @@ describe('Initialization TestCase', function () {

firstHeader: 'h3',
forcePlainText: true,
cleanPastedHTML: false,
allowMultiParagraphSelection: true,

@@ -130,6 +128,13 @@ placeholder: 'Type your text',

firstButtonClass: 'medium-editor-button-first',
lastButtonClass: 'medium-editor-button-last'
lastButtonClass: 'medium-editor-button-last',
paste: {
forcePlainText: true,
cleanPastedHtml: false,
cleanAttrs: ['class', 'style', 'dir'],
cleanTags: ['meta']
}
},
editor = new MediumEditor('.editor');
expect(editor.options).toEqual(defaultOptions);
expect(Object.keys(editor.options).length).toBe(Object.keys(defaultOptions).length);
expect(_.isEqual(editor.options, defaultOptions)).toBe(true);
});

@@ -148,3 +153,5 @@

editor = new MediumEditor('.editor', options);
expect(editor.options).toEqual(options);
Object.keys(options).forEach(function (customOption) {
expect(editor.options[customOption]).toBe(options[customOption]);
});
});

@@ -151,0 +158,0 @@

@@ -72,3 +72,3 @@ /*global MediumEditor, describe, it, expect, spyOn,

describe('using cleanPastedHTML option', function () {
describe('using cleanPastedHtml option', function () {
it('should filter multi-line rich-text pastes', function () {

@@ -80,3 +80,3 @@ var i,

forcePlainText: false,
cleanPastedHTML: true
cleanPastedHtml: true
});

@@ -114,6 +114,7 @@

});
});
it('should filter inline rich-text pastes', function () {
describe('cleanPaste', function () {
it('should filter inline rich-text', function () {
var i,
regex,
editorEl = this.el,

@@ -123,3 +124,3 @@ editor = new MediumEditor('.editor', {

forcePlainText: false,
cleanPastedHTML: true
cleanPastedHtml: true
});

@@ -140,12 +141,10 @@

// Webkit: doing an insertHTML while this <span> is selected results in the span being replaced completely
regex = new RegExp("^Before(&nbsp;|\\s)(<span id=\"editor-inner\">)?" + inlineTests[i].output + "(</span>)?(&nbsp;|\\s)after\\.$");
expect(regex.test(editorEl.innerHTML)).toBe(true);
expect(editorEl.innerHTML).toMatch(new RegExp("^Before(&nbsp;|\\s)(<span id=\"editor-inner\">)?" + inlineTests[i].output + "(</span>)?(&nbsp;|\\s)after\\.$"));
}
});
it('should filter inline rich-text pastes when "insertHTML" command is not supported', function () {
var regex,
editor = new MediumEditor('.editor', {
it('should filter inline rich-text when "insertHTML" command is not supported', function () {
var editor = new MediumEditor('.editor', {
forcePlainText: false,
cleanPastedHTML: true
cleanPastedHtml: true
});

@@ -165,6 +164,22 @@

// Webkit: doing an insertHTML while this <span> is selected results in the span being replaced completely
regex = new RegExp("^Before(&nbsp;|\\s)(<span id=\"editor-inner\">)?" + test.output + "(</span>)?(&nbsp;|\\s)after\\.$");
expect(regex.test(this.el.innerHTML)).toBe(true);
expect(this.el.innerHTML).toMatch(new RegExp("^Before(&nbsp;|\\s)(<span id=\"editor-inner\">)?" + test.output + "(</span>)?(&nbsp;|\\s)after\\.$"));
}.bind(this));
});
it('should respect custom replacments when passed during instantiation', function () {
var editor = new MediumEditor('.editor', {
paste: {
forcePlainText: false,
cleanPastedHtml: true,
cleanReplacements: [[new RegExp(/<label>/gi), '<sub>'], [new RegExp(/<\/label>/gi), '</sub>']]
}
});
this.el.innerHTML = 'Before&nbsp;<span id="editor-inner">&nbsp;</span>&nbsp;after.';
selectElementContents(document.getElementById('editor-inner'));
editor.cleanPaste('<label>div one</label><label>div two</label>');
expect(this.el.innerHTML).toMatch(new RegExp("^Before(&nbsp;|\\s)(<span id=\"editor-inner\">)?<sub>div one</sub><sub>div two</sub>(</span>)?(&nbsp;|\\s)after\\.$"));
});
});

@@ -199,3 +214,21 @@

});
it('should respect custom clean up options passed during instantiation', function () {
var editor = new MediumEditor('.editor', {
paste: {
cleanAttrs: ['style', 'dir'],
cleanTags: ['meta', 'b']
}
});
selectElementContents(this.el.firstChild);
editor.pasteHTML(
'<table class="medium-editor-table" dir="ltr" style="border: 1px solid red;"><tbody><tr><td>test</td></tr></tbody></table>' +
'<div><i>test</i><meta name="description" content="test" /><b>test</b></div>'
);
expect(editor.elements[0].innerHTML).toBe(
'<table class="medium-editor-table"><tbody><tr><td>test</td></tr></tbody></table>' +
'<div><i>test</i></div>'
);
});
});
});
/*global MediumEditor, describe, it, expect, spyOn, jasmine,
fireEvent, afterEach, beforeEach, selectElementContents,
tearDown, selectElementContentsAndFire */
tearDown, selectElementContentsAndFire, editorDefaults */

@@ -54,2 +54,6 @@ describe('Setup/Destroy TestCase', function () {

});
it('should know about defaults', function() {
expect(MediumEditor.prototype.defaults).toBe(editorDefaults);
});
});

@@ -56,0 +60,0 @@

@@ -15,4 +15,99 @@ /*global MediumEditor, Util, describe, it, expect, spyOn */

describe('Extend', function () {
it('should overwrite values from right to left', function () {
var objOne = { one: "one" };
var objTwo = { one: "two", three: "three" };
var objThree = { three: "four", five: "six" };
var objFour;
var result = MediumEditor.util.extend({}, objOne, objTwo, objThree, objFour);
// expect(_.isEqual(result, { one: "two", three: "four", five: "six" })).toBe(true);
expect(result).toEqual({ one: "two", three: "four", five: "six" });
});
});
describe('Defaults', function () {
it('should overwrite values from left to right', function () {
var objOne = { one: "one" };
var objTwo = { one: "two", three: "three" };
var objThree = { three: "four", five: "six" };
var objFour;
var result = MediumEditor.util.defaults({}, objOne, objTwo, objThree, objFour);
// expect(_.isEqual(result, { one: "one", three: "three", five: "six" })).toBe(true);
expect(result).toEqual({ one: "one", three: "three", five: "six" });
});
});
describe('Deprecated', function () {
it('should warn when a method is deprecated', function () {
var testObj = {
newMethod: function () {}
};
spyOn(testObj, 'newMethod').and.callThrough();
spyOn(Util, 'warn').and.callThrough();
Util.deprecatedMethod.call(testObj, 'test', 'newMethod', ['arg1', true]);
expect(testObj.newMethod).toHaveBeenCalledWith('arg1', true);
expect(Util.warn).toHaveBeenCalledWith(
'test is deprecated, please use newMethod instead.'
);
});
it('should warn when an option is deprecated', function () {
spyOn(Util, 'warn').and.callThrough();
Util.deprecated('oldOption', 'sub.newOption');
expect(Util.warn).toHaveBeenCalledWith(
'oldOption is deprecated, please use sub.newOption instead.'
);
});
it('should allow passing a version when the removal will happen', function () {
spyOn(Util, 'warn').and.callThrough();
Util.deprecated("old","new","11tybillion");
expect(Util.warn).toHaveBeenCalledWith(
'old is deprecated, please use new instead. Will be removed in 11tybillion'
);
});
});
describe('getobject', function () {
it("should get nested objects", function(){
var obj = { a: { b: { c: { d: 10 } } } };
expect(Util.getObject("a.b.c.d", false, obj)).toBe(10);
expect(Util.getObject("a.b.c", false, obj)).toEqual({ d: 10 });
expect(Util.getObject("a", false, obj)).toEqual({ b: { c: { d: 10 }}});
});
it("should create a path if told to", function(){
var obj = {};
expect(Util.getObject("a.b.c.d", true, obj)).toEqual({});
expect(obj.a.b.c.d).toBeTruthy();
});
it("should NOT create a path", function() {
var obj = {};
expect(Util.getObject("a.b.c.d.e.f.g", false, obj)).toBe(undefined);
expect(obj.a).toBe(undefined);
});
});
describe('setobject', function () {
it("sets returns the value", function(){
var obj = {};
expect(Util.setObject("a.b.c", 10, obj)).toBe(10);
expect(obj.a.b.c).toBe(10);
});
});
describe('warn', function () {
it("exists", function () {
expect(typeof Util.warn).toBe("function");
});
it("ends up calling console.warn", function () {
// IE9 mock for SauceLabs

@@ -26,15 +121,11 @@ if (window.console === undefined) {

}
var testObj = {
newMethod: function () {}
};
spyOn(testObj, 'newMethod').and.callThrough();
spyOn(window.console, 'warn').and.callThrough();
Util.deprecatedMethod.call(testObj, 'test', 'newMethod', ['arg1', true]);
expect(testObj.newMethod).toHaveBeenCalledWith('arg1', true);
expect(window.console.warn).toHaveBeenCalledWith(
'test is deprecated and will be removed, please use newMethod instead'
);
var spy = spyOn(window.console.warn, "apply").and.callThrough();
Util.warn("message");
expect(spy).toHaveBeenCalled();
});
});
});

@@ -1,3 +0,2 @@

var DefaultButton,
ButtonsData;
var DefaultButton;

@@ -7,227 +6,2 @@ (function () {

ButtonsData = {
'bold': {
name: 'bold',
action: 'bold',
aria: 'bold',
tagNames: ['b', 'strong'],
style: {
prop: 'font-weight',
value: '700|bold'
},
useQueryState: true,
contentDefault: '<b>B</b>',
contentFA: '<i class="fa fa-bold"></i>',
key: 'b'
},
'italic': {
name: 'italic',
action: 'italic',
aria: 'italic',
tagNames: ['i', 'em'],
style: {
prop: 'font-style',
value: 'italic'
},
useQueryState: true,
contentDefault: '<b><i>I</i></b>',
contentFA: '<i class="fa fa-italic"></i>',
key: 'i'
},
'underline': {
name: 'underline',
action: 'underline',
aria: 'underline',
tagNames: ['u'],
style: {
prop: 'text-decoration',
value: 'underline'
},
useQueryState: true,
contentDefault: '<b><u>U</u></b>',
contentFA: '<i class="fa fa-underline"></i>',
key: 'u'
},
'strikethrough': {
name: 'strikethrough',
action: 'strikethrough',
aria: 'strike through',
tagNames: ['strike'],
style: {
prop: 'text-decoration',
value: 'line-through'
},
useQueryState: true,
contentDefault: '<s>A</s>',
contentFA: '<i class="fa fa-strikethrough"></i>'
},
'superscript': {
name: 'superscript',
action: 'superscript',
aria: 'superscript',
tagNames: ['sup'],
/* firefox doesn't behave the way we want it to, so we CAN'T use queryCommandState for superscript
https://github.com/guardian/scribe/blob/master/BROWSERINCONSISTENCIES.md#documentquerycommandstate */
// useQueryState: true
contentDefault: '<b>x<sup>1</sup></b>',
contentFA: '<i class="fa fa-superscript"></i>'
},
'subscript': {
name: 'subscript',
action: 'subscript',
aria: 'subscript',
tagNames: ['sub'],
/* firefox doesn't behave the way we want it to, so we CAN'T use queryCommandState for subscript
https://github.com/guardian/scribe/blob/master/BROWSERINCONSISTENCIES.md#documentquerycommandstate */
// useQueryState: true
contentDefault: '<b>x<sub>1</sub></b>',
contentFA: '<i class="fa fa-subscript"></i>'
},
'image': {
name: 'image',
action: 'image',
aria: 'image',
tagNames: ['img'],
contentDefault: '<b>image</b>',
contentFA: '<i class="fa fa-picture-o"></i>'
},
'quote': {
name: 'quote',
action: 'append-blockquote',
aria: 'blockquote',
tagNames: ['blockquote'],
contentDefault: '<b>&ldquo;</b>',
contentFA: '<i class="fa fa-quote-right"></i>'
},
'orderedlist': {
name: 'orderedlist',
action: 'insertorderedlist',
aria: 'ordered list',
tagNames: ['ol'],
useQueryState: true,
contentDefault: '<b>1.</b>',
contentFA: '<i class="fa fa-list-ol"></i>'
},
'unorderedlist': {
name: 'unorderedlist',
action: 'insertunorderedlist',
aria: 'unordered list',
tagNames: ['ul'],
useQueryState: true,
contentDefault: '<b>&bull;</b>',
contentFA: '<i class="fa fa-list-ul"></i>'
},
'pre': {
name: 'pre',
action: 'append-pre',
aria: 'preformatted text',
tagNames: ['pre'],
contentDefault: '<b>0101</b>',
contentFA: '<i class="fa fa-code fa-lg"></i>'
},
'indent': {
name: 'indent',
action: 'indent',
aria: 'indent',
tagNames: [],
contentDefault: '<b>&rarr;</b>',
contentFA: '<i class="fa fa-indent"></i>'
},
'outdent': {
name: 'outdent',
action: 'outdent',
aria: 'outdent',
tagNames: [],
contentDefault: '<b>&larr;</b>',
contentFA: '<i class="fa fa-outdent"></i>'
},
'justifyCenter': {
name: 'justifyCenter',
action: 'justifyCenter',
aria: 'center justify',
tagNames: [],
style: {
prop: 'text-align',
value: 'center'
},
useQueryState: true,
contentDefault: '<b>C</b>',
contentFA: '<i class="fa fa-align-center"></i>'
},
'justifyFull': {
name: 'justifyFull',
action: 'justifyFull',
aria: 'full justify',
tagNames: [],
style: {
prop: 'text-align',
value: 'justify'
},
useQueryState: true,
contentDefault: '<b>J</b>',
contentFA: '<i class="fa fa-align-justify"></i>'
},
'justifyLeft': {
name: 'justifyLeft',
action: 'justifyLeft',
aria: 'left justify',
tagNames: [],
style: {
prop: 'text-align',
value: 'left'
},
useQueryState: true,
contentDefault: '<b>L</b>',
contentFA: '<i class="fa fa-align-left"></i>'
},
'justifyRight': {
name: 'justifyRight',
action: 'justifyRight',
aria: 'right justify',
tagNames: [],
style: {
prop: 'text-align',
value: 'right'
},
useQueryState: true,
contentDefault: '<b>R</b>',
contentFA: '<i class="fa fa-align-right"></i>'
},
'header1': {
name: 'header1',
action: function (options) {
return 'append-' + options.firstHeader;
},
aria: function (options) {
return options.firstHeader;
},
tagNames: function (options) {
return [options.firstHeader];
},
contentDefault: '<b>H1</b>'
},
'header2': {
name: 'header2',
action: function (options) {
return 'append-' + options.secondHeader;
},
aria: function (options) {
return options.secondHeader;
},
tagNames: function (options) {
return [options.secondHeader];
},
contentDefault: '<b>H2</b>'
},
// Known inline elements that are not removed, or not removed consistantly across browsers:
// <span>, <label>, <br>
'removeFormat': {
name: 'removeFormat',
aria: 'remove formatting',
action: 'removeFormat',
contentDefault: '<b>X</b>',
contentFA: '<i class="fa fa-eraser"></i>'
}
};
DefaultButton = function (options, instance) {

@@ -349,3 +123,3 @@ this.options = options;

}
}.bind(this));
}, this);
}

@@ -352,0 +126,0 @@

/*global FileReader, Util, ButtonsData, DefaultButton,
PasteHandler, Selection, AnchorExtension,
Toolbar, AnchorPreview, Events, Placeholders*/
PasteHandler, Selection, AnchorExtension, Extension, extensionDefaults,
Toolbar, AnchorPreview, Events, Placeholders, editorDefaults */

@@ -348,3 +348,3 @@ function MediumEditor(elements, options) {

}
}.bind(this));
}, this);
}

@@ -359,2 +359,19 @@

function initPasteHandler() {
var pasteOptions = Util.extend(
{},
this.options.paste,
// Backwards compatability
{
forcePlainText: this.options.forcePlainText, // deprecated
cleanPastedHtml: this.options.cleanPastedHtml, // deprecated
disableReturn: this.options.disableReturn,
targetBlank: this.options.targetBlank,
contentWindow: this.options.contentWindow,
ownerDocument: this.options.ownerDocument
});
this.pasteHandler = new PasteHandler(this, pasteOptions);
}
function initCommands() {

@@ -378,3 +395,3 @@ var buttons = this.options.buttons,

}
}.bind(this));
}, this);

@@ -393,2 +410,27 @@ for (name in extensions) {

function mergeOptions(defaults, options) {
// warn about using deprecated properties
if (options) {
[['forcePlainText', 'paste.forcePlainText'],
['cleanPastedHtml', 'paste.cleanPastedHtml']].forEach(function (pair) {
if (options.hasOwnProperty(pair[0]) && options[pair[0]] !== undefined) {
Util.deprecated(pair[0], pair[1]);
}
});
}
var nestedMerges = ['paste'];
var tempOpts = Util.extend({}, options);
nestedMerges.forEach(function (toMerge) {
if (!tempOpts[toMerge]) {
tempOpts[toMerge] = defaults[toMerge];
} else {
tempOpts[toMerge] = Util.defaults({}, tempOpts[toMerge], defaults[toMerge]);
}
});
return Util.defaults(tempOpts, defaults);
}
function execActionInternal(action, opts) {

@@ -418,2 +460,3 @@ /*jslint regexp: true*/

// deprecate
MediumEditor.statics = {

@@ -427,2 +470,5 @@ ButtonsData: ButtonsData,

MediumEditor.Extension = Extension;
MediumEditor.extensions = extensionDefaults;
MediumEditor.util = Util;

@@ -432,40 +478,5 @@ MediumEditor.selection = Selection;

MediumEditor.prototype = {
defaults: {
allowMultiParagraphSelection: true,
anchorInputPlaceholder: 'Paste or type a link',
anchorInputCheckboxLabel: 'Open in new window',
anchorPreviewHideDelay: 500,
buttons: ['bold', 'italic', 'underline', 'anchor', 'header1', 'header2', 'quote'],
buttonLabels: false,
checkLinkFormat: false,
cleanPastedHTML: false,
delay: 0,
diffLeft: 0,
diffTop: -10,
disableReturn: false,
disableDoubleReturn: false,
disableToolbar: false,
disableAnchorPreview: false,
disableEditing: false,
disablePlaceholders: false,
toolbarAlign: 'center',
elementsContainer: false,
imageDragging: true,
standardizeSelectionStart: false,
contentWindow: window,
ownerDocument: document,
firstHeader: 'h3',
forcePlainText: true,
placeholder: 'Type your text',
secondHeader: 'h4',
targetBlank: false,
anchorTarget: false,
anchorButton: false,
anchorButtonClass: 'btn',
extensions: {},
activeButtonClass: 'medium-editor-button-active',
firstButtonClass: 'medium-editor-button-first',
lastButtonClass: 'medium-editor-button-last'
},
defaults: editorDefaults,
// NOT DOCUMENTED - exposed for backwards compatability

@@ -475,3 +486,3 @@ init: function (elements, options) {

this.options = Util.defaults(options, this.defaults);
this.options = mergeOptions.call(this, this.defaults, options);
createElementsArray.call(this, elements);

@@ -508,3 +519,3 @@ if (this.elements.length === 0) {

this.pasteHandler = new PasteHandler(this);
initPasteHandler.call(this);

@@ -539,3 +550,3 @@ if (!this.options.disablePlaceholders) {

}
}.bind(this));
}, this);

@@ -582,6 +593,8 @@ this.events.detachAllDOMEvents();

if (this.commands && this.commands.length) {
this.commands.forEach(function (ext) {
this.commands.some(function (ext) {
if (ext.name === name) {
extension = ext;
return true;
}
return false;
});

@@ -745,7 +758,8 @@ }

// Find element current selection is inside
this.elements.forEach(function (el, index) {
this.elements.some(function (el, index) {
if (el === range.startContainer || Util.isDescendant(el, range.startContainer)) {
editableElementIndex = index;
return false;
return true;
}
return false;
});

@@ -752,0 +766,0 @@

@@ -134,3 +134,3 @@ /*global Util, Selection */

this.attachDOMEvent(element, 'mouseover', this.handleMouseover.bind(this));
}.bind(this));
}, this);
this.listeners[name] = true;

@@ -143,3 +143,3 @@ break;

this.attachDOMEvent(element, 'dragleave', this.handleDragging.bind(this));
}.bind(this));
}, this);
this.listeners[name] = true;

@@ -151,3 +151,3 @@ break;

this.attachDOMEvent(element, 'drop', this.handleDrop.bind(this));
}.bind(this));
}, this);
this.listeners[name] = true;

@@ -159,3 +159,3 @@ break;

this.attachDOMEvent(element, 'paste', this.handlePaste.bind(this));
}.bind(this));
}, this);
this.listeners[name] = true;

@@ -169,3 +169,3 @@ break;

selection = this.options.contentWindow.getSelection(),
toolbarEl = (this.base.toolbar) ? this.base.toolbar.getToolbarElement() : null,
toolbarEl = this.base.toolbar ? this.base.toolbar.getToolbarElement() : null,
anchorPreview = this.base.getExtensionByName('anchor-preview'),

@@ -172,0 +172,0 @@ previewEl = (anchorPreview && anchorPreview.getPreviewElement) ? anchorPreview.getPreviewElement() : null,

@@ -50,5 +50,22 @@ /*global Util, Selection*/

PasteHandler = function (instance) {
/* Paste Options:
*
* forcePlainText: Forces pasting as plain text. Default: true
* cleanPastedHtml: cleans pasted content from different sources, like google docs etc. Default: false
* cleanReplacements: custom pairs (2 element arrays) of RegExp and replacement text to use during paste when
* __forcePlainText__ or __cleanPastedHtml__ are `true` OR when calling `cleanPaste(text)`
* helper method. Default: []
* cleanAttrs: list of attributes to remove when ... default: ['class', 'style', 'dir']
* cleanTags: list of element tag names to remove... default: ['meta']
*
* ----- internal options needed from base -----
* disableReturn
* targetBlank
* contentWindow
* ownerDocument
*/
PasteHandler = function (instance, options) {
this.base = instance;
this.options = this.base.options;
this.options = options;

@@ -107,3 +124,3 @@ if (this.options.forcePlainText || this.options.cleanPastedHTML) {

multiline = /<p|<br|<div/.test(text),
replacements = createReplacements();
replacements = createReplacements().concat(this.options.cleanReplacements || []);

@@ -155,6 +172,3 @@ for (i = 0; i < replacements.length; i += 1) {

pasteHTML: function (html, options) {
options = Util.defaults(options, {
cleanAttrs: ['class', 'style', 'dir'],
cleanTags: ['meta']
});
options = Util.defaults({}, options, this.options);

@@ -161,0 +175,0 @@ var elList, workEl, i, fragmentBody, pasteBlock = this.options.ownerDocument.createDocumentFragment();

@@ -18,3 +18,3 @@ var Placeholders;

this.updatePlaceholder(el);
}.bind(this));
}, this);
},

@@ -21,0 +21,0 @@

@@ -137,3 +137,3 @@ /*global Util, Selection*/

this.base.on(element, 'blur', this.handleEditableBlur.bind(this));
}.bind(this));
}, this);
},

@@ -140,0 +140,0 @@

@@ -8,8 +8,41 @@ /*global NodeFilter, console*/

function copyInto(dest, source, overwrite) {
var prop;
// Params: Array, Boolean, Object
function getProp(parts, create, context) {
if (!context) {
context = window;
}
try {
for (var i = 0; i < parts.length; i++) {
var p = parts[i];
if (!(p in context)) {
if (create) {
context[p] = {};
} else {
return;
}
}
context = context[p];
}
return context;
} catch (e) {
// "p in context" throws an exception when context is a number, boolean, etc. rather than an object,
// so in that corner case just return undefined (by having no return statement)
}
}
function copyInto(overwrite, dest) {
var prop,
sources = Array.prototype.slice.call(arguments, 2);
dest = dest || {};
for (prop in source) {
if (source.hasOwnProperty(prop) && (overwrite || dest.hasOwnProperty(prop) === false)) {
dest[prop] = source[prop];
for (var i = 0; i < sources.length; i++) {
var source = sources[i];
if (source) {
for (prop in source) {
if (source.hasOwnProperty(prop) &&
typeof source[prop] !== 'undefined' &&
(overwrite || dest.hasOwnProperty(prop) === false)) {
dest[prop] = source[prop];
}
}
}

@@ -38,6 +71,12 @@ }

defaults: function defaults(dest, source) {
return copyInto(dest, source);
extend: function extend(/* dest, source1, source2, ...*/) {
var args = [true].concat(Array.prototype.slice.call(arguments));
return copyInto.apply(this, args);
},
defaults: function defaults(/*dest, source1, source2, ...*/) {
var args = [false].concat(Array.prototype.slice.call(arguments));
return copyInto.apply(this, args);
},
derives: function derives(base, derived) {

@@ -49,3 +88,3 @@ var origPrototype = derived.prototype;

derived.prototype.constructor = base;
derived.prototype = copyInto(derived.prototype, origPrototype);
derived.prototype = copyInto(false, derived.prototype, origPrototype);
return derived;

@@ -113,3 +152,3 @@ },

later = function () {
previous = Util.now();
previous = Date.now();
timeout = null;

@@ -127,3 +166,3 @@ result = func.apply(context, args);

return function () {
var now = Util.now(),
var now = Date.now(),
remaining = wait - (now - previous);

@@ -361,10 +400,20 @@

deprecatedMethod: function (oldName, newName, args) {
// Thanks IE9, you're the best
if (window.console !== undefined) {
console.warn(oldName +
' is deprecated and will be removed, please use ' +
newName +
' instead');
warn: function(){
if(window.console !== undefined){
console.warn.apply(console, arguments);
}
},
deprecated: function(oldName, newName, version){
// simple deprecation warning mechanism.
var m = oldName + " is deprecated, please use " + newName + " instead.";
if(version){
m += " Will be removed in " + version;
}
Util.warn(m);
},
deprecatedMethod: function (oldName, newName, args, version) {
// run the replacement and warn when someone calls a deprecated method
Util.deprecated(oldName, newName, version);
if (typeof this[newName] === 'function') {

@@ -387,4 +436,18 @@ this[newName].apply(this, args);

});
},
setObject: function(name, value, context){
// summary:
// Set a property from a dot-separated string, such as "A.B.C"
var parts = name.split("."), p = parts.pop(), obj = getProp(parts, true, context);
return obj && p ? (obj[p] = value) : undefined; // Object
},
getObject: function(name, create, context){
// summary:
// Get a property from a dot-separated string, such as "A.B.C"
return getProp(name ? name.split(".") : [], create, context); // Object
}
};
}(window));

@@ -14,3 +14,3 @@

// grunt-bump looks for this:
"version": "4.2.0"
"version": "4.3.0"
}).version.split("."));

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc