/*! Inline Editor - v0.1.0 - * 2015-10-06 * * https://github.com/alsofronie/inline-editor * Copyright (c) 2015 Alex Sofronie; * Licensed MIT */ !function(a,b,c){"use strict";function d(a,b){var c;for(c in b)a.hasOwnProperty(c)&&("object"==typeof b[c]?a[c]=d(a[c],b[c]):a[c]=b[c]);return a}function e(b,c){return b=b||a.event,b.stopPropagation&&b.stopPropagation(),b.cancelBubble=!0,c===!0&&b.preventDefault(),!1}var f={lang:{text:"Add your text here",title:"Add your title here"},toolboxes:{selection:["bold","italic","underline","strikethrough","|","h","p","|","align"],insert:["plus","image","video","embed","section"],image:["pos","|","sec","|","del"]}},g={selection:{current:null,name:"selection",id:"seltbx-pane",position:"top",widgets:{bold:function(a){return a?void document.execCommand("bold",!1,!0):{icon:"bold"}},italic:function(a){return a?void document.execCommand("italic",!1,!0):{icon:"italic"}},underline:function(a){return a?void document.execCommand("underline",!1,!0):{icon:"underline"}},strikethrough:function(a){return a?void document.execCommand("strikeThrough",!1,!0):{icon:"strike"}},align:function(a){return a?(h.hasClass(this.sel,"text-center")?(h.removeClass(this.sel,"text-center"),h.addClass(this.sel,"text-right")):h.hasClass(this.sel,"text-right")?(h.removeClass(this.sel,"text-right"),h.addClass(this.sel,"text-justify")):h.hasClass(this.sel,"text-justify")?h.removeClass(this.sel,"text-justify"):h.addClass(this.sel,"text-center"),h.normalize(this.sel),h.select(this.sel),void 0):{icon:"align"}},p:function(a){if(!a)return{icon:"para"};if(!h.is(this.sel,"p")){var b=h.change(this.sel,"p",!1);h.normalize(b),h.select(b)}},h:function(a){if(!a)return{icon:"heading"};console.info("We need to change the current parent elment to a heading",this.sel);var b="h1";h.is(this.sel,"h1")?b="h2":h.is(this.sel,"h2")?b="h3":h.is(this.sel,"h3")?b="h4":h.is(this.sel,"h4")?b="h5":h.is(this.sel,"h5")&&(b="h6");var c=h.change(this.sel,b,!0);h.normalize(c),h.select(c)}}},insert:{current:null,name:"insert",id:"instbx-pane",position:"left",widgets:{plus:function(a){if(!a)return{icon:"close"};var b=document.getElementById("instbx-pane");h.toggleClass(b,"expanded")},image:function(b){if(!b)return{icon:"image"};if(!a.FileReader)return alert("Your browser does not support FileReader so you cannot upload files this way. Please use a modern browser such as Google Chrome or Mozilla Firefox, updated to their latest versions!"),!1;var c=this,d=document.createElement("input");d.type="file",d.name="userFile",d.multiple="true",d.style.position="absolute",d.style.left="-9999px",d.style.top="-9999px",d.onchange=function(){var a,b,d,e,f,g;for(a=this.files,b=[],console.info("Uploading files ",this.files),f=a.length,g=0,e=0;f>e;e++)console.info("File index is",e),d=new FileReader,d.token=e,d.fname=a[e].name,d.onloadend=function(){var a=document.createElement("img");a.src=this.result,a.dataset.width=a.width,a.dataset.height=a.height,a.dataset.name=this.fname,b[this.token]=a,g+=1},d.readAsDataURL(a[e]);var h=function(){f===g?c.insertFigure(b):setTimeout(h,1)};h()},document.body.appendChild(d),d.focus(),d.click()},video:function(a){return a?void console.info("Clicked on INSERT VIDEO"):{icon:"video"}},embed:function(a){return a?void console.info("Clicked on INSERT EMBED"):{icon:"embed"}},section:function(a){return a?(h.change(this.sel,"hr"),this.createNewSection(),this.showToolbox(a),void 0):{icon:"hr"}}}},image:{current:null,name:"image",id:"imgtbx-pane",position:"top",widgets:{pos:function(a){var b;if(!a)return{icon:"image-size"};var c=this.sec;if(console.info("Running through image sizes with section",c),h.hasClass(c,"wide"))h.removeClass(c,"wide"),h.addClass(c,"full");else if(h.hasClass(c,"full")){h.removeClass(c,"full"),h.addClass(c,"inline-text"),b=h.create("p"),b.dataset.text="Add your text here",h.attr(b,"contenteditable","true");var d=this.getData(c,"oldp");d&&(b.innerHTML=d),c.appendChild(b)}else h.hasClass(c,"inline-text")?(h.removeClass(c,"inline-text"),h.addClass(c,"inline-text-expand")):h.hasClass(c,"inline-text-expand")?(h.removeClass(c,"inline-text-expand"),b=c.getElementsByTagName("p"),b.length>0&&(b=b[0],h.normalize(b),this.setData(c,"oldp",b.innerHTML)),h.removeAllChildren(c,"p")):h.addClass(c,"wide")},sec:function(a){return a?void console.info("Must make the image very big"):{icon:"image-big"}},del:function(a){if(!a)return{icon:"close"};var b,c=document.getElementsByClassName("img-active");if(1===c.length&&c[0]===this.img){b=c[0];var d=b.parentElement,e=d.children.length;if(h.destroy(b),2===e){var f=this.sec;this.createNewSection(),h.destroy(f)}this.updateFigureAppearance(),this.hideToolbox(g.image)}else console.info("No image to delete...")}}}};a.InlineEditor=function(){function b(b){b=b?b:a.event,m.setSelection(),m.normalize();var c=m.getSelection();if(0===c.rangeCount)return!1;for(var d=c.getRangeAt(0).commonAncestorContainer;d!==m.src;){if(h.is(d,"body")||h.is(d,"html"))return m.hideToolbox(),!0;d=d.parentElement}c.isCollapsed?(m.hideToolbox(g.selection),h.is(m.sel,"p")&&!m.sel.hasChildNodes()?m.showToolbox(g.insert):m.hideToolbox(g.insert)):(m.showToolbox(g.selection),m.hideToolbox(g.insert),m.hideToolbox(g.image))}function i(b){if(b=b?b:a.event,m.setSelection(),13===b.keyCode)if(e(b,!0),b.shiftKey===!0){var c,d,f,i;window.getSelection?(c=window.getSelection(),c.getRangeAt&&c.rangeCount&&(d=c.getRangeAt(0),d.deleteContents(),d.collapse(!1),f=h.create("br"),d.insertNode(f),d=d.cloneRange(),d.setStartAfter(f),d.setEndAfter(f),i=h.createText("..."),d.insertNode(i),d.selectNode(i),c.removeAllRanges(),c.addRange(d),""!==i.nextSibling.nodeValue&&c.deleteFromDocument())):document.selection&&document.selection.createRange&&(document.selection.createRange().text="
")}else console.info("creating new section: ",b),m.createNewSection();else if(8===b.keyCode||46===b.keyCode){var j=document.getElementsByClassName("img-active");if(j.length>0&&j[0]===m.img)return e(b,!0),g.image.widgets.del.apply(m,[!0]),!1}else console.info("need to hide toolboxes"),m.hideToolbox(g.insert)}function j(b){b=b?b:a.event,m.setSelection(),(8===b.keyCode||46===b.keyCode)&&m.verifyEmptyElement()}function k(b){b=b?b:a.event;var c=b.target;h.is(c,"img")&&h.is(c.parentElement,"figure")?(m.selectNone(),m.hideToolbox(g.insert),m.hideToolbox(g.selection),m.img=c,m.sec=h.hasParent(c,"section"),h.addClass(c,"img-active"),m.showToolbox(g.image)):m.hideToolbox(g.image)}function l(a){a.preventDefault();var b=a.clipboardData.getData("text/plain");console.info("pasted data is ",b);var c=a.target;return h.is(c,"p")&&h.is(c.parentElement,"section")&&(c.innerHTML=b),!1}if(this.src=null,this.sel=null,this.sec=null,this.img=null,this.settings=null,this.objData={},0===arguments.length)throw"Init error: we need the editor element!";1===arguments.length?(this.src=arguments[0],this.settings=f):2===arguments.length&&"object"==typeof arguments[1]&&(this.src=arguments[0],this.settings=d(f,arguments[1])),this.src.classList.add("ied-article"),h.attr(this.src,"contenteditable","true");var m=this;document.addEventListener("selectionchange",b),this.src.addEventListener("keydown",i),this.src.addEventListener("keyup",j),this.src.addEventListener("click",k),this.src.addEventListener("paste",l),this.setup=function(a){"object"==typeof a&&(this.settings=d(this.settings,a))},this.getSelection=function(){if(window.getSelection)return window.getSelection();var a=document.selection;return a&&"Control"!==a.type?a:null},this.createNewSection=function(){var a=document.createElement("section");a.className="col";var b=document.createElement("p");b.dataset.text=this.settings.lang.text,a.appendChild(b),this.sec.nextSibling?this.sec.parentNode.insertBefore(a,this.sec.nextSibling):this.sec.appendNode(a);var c,d;return c=document.createRange(),c.selectNodeContents(b),c.collapse(!0),d=window.getSelection(),d.removeAllRanges(),d.addRange(c),this.setSelection(),!1},this.showToolbox=function(a){if(null===a.current){var b=h.create("div");b.id=a.id;var d=h.create("ul");b.appendChild(d);var e=a.widgets,f=this.settings.toolboxes[a.name];for(var g in f){var i=f[g];if("|"!==i)if(e[i]){var j=e[i](!1),k=h.create("li"),l=h.create("button");if(l.dataset.act=i,j.icon!==c){var m=h.create("i","icon icon-"+j.icon);l.appendChild(m)}else j.text!==c&&l.appendChild(document.createTextNode(j.text));var n=this;l.addEventListener("click",function(b){for(var c=b.srcElement||b.target;!h.is(c,"button");)c=c.parentNode;console.info("event target is now",c);var d=c.dataset.act;e[d].call(n,a)}),k.appendChild(l),d.appendChild(k)}else console.error("We do not know how to handle ",i);else{var o=h.create("li","divider");d.appendChild(o)}}document.body.appendChild(b),a.current=b}a.current.className="";var p,q,r,s;return p=this.getSelection(),p.rangeCount>0?(q=p.getRangeAt(0).cloneRange(),r=q.getClientRects()[0],r=h.adjustRect(r)):null!==this.img&&(r=this.img.getBoundingClientRect(),r=h.adjustRect(r)),"top"===a.position?(s={width:a.current.offsetWidth,height:a.current.offsetHeight},a.current.style.left=r.left-Math.floor(s.width/2)+Math.floor(r.width/2)+"px",a.current.style.top=r.top-3-s.height+"px"):"left"===a.position&&(a.current.style.left=r.left-80+"px",a.current.style.top=r.top+"px"),a.current},this.hideToolbox=function(a){return null!==a&&a!==c?a&&a.current&&null!==a.current&&a.current!==c?(a.current.className="hidden","image"===a.name&&this.unselectImages(),!0):!1:(this.hideToolbox(g.image),this.hideToolbox(g.selection),this.hideToolbox(g.insert),this.unselectImages(),void 0)},this.unselectImages=function(){var a=document.getElementsByClassName("img-active");for(var b in a)a[b]&&a[b].classList&&h.is(a[b],"img")&&h.removeClass(a[b],"img-active")},this.setSelection=function(){var a=this.getSelection();if(0===a.rangeCount)return!1;for(var b=a.getRangeAt(0).commonAncestorContainer;b;){if(h.is(b,"body")||h.is(b,"html"))return!1;if(1===b.nodeType&&h.is(b,"section"))break;b=b.parentNode}if(b){for(this.sec=b,b=b.firstChild;b&&1!==b.nodeType||h.is(b,"figure");)b=b.nextSibling;return this.sel=b,!0}return!1},this.normalize=function(){null!==this.sel&&h.normalize(this.sel)},this.verifyEmptyElement=function(){var a=this.sel;console.info("Verify empty on parent",a);var b=a;if(console.info("We need to check the node ",b),!b)return!0;h.is(b,"figure")&&(b=b.lastChild);var c=b.innerHTML.trim().toLowerCase();console.info("html is ",c),("
"===c||"
"===c||"
"===c||" "===c||""===c)&&(b.innerHTML=null,b.className="")},this.insertFigure=function(a){var b,d,e,f;for(b=document.createElement("figure"),b.setAttribute("contenteditable",!1),e=0;e1){b.length%2===0?h.addClass(this.sec,"multiple-even"):h.addClass(this.sec,"multiple-odd"),h.addClass(this.sec,"wide");var c,d,e,f=h.getWidth(this.sec),g=Math.floor(b.length/2),i=10;for(c=0;g>c;c++){d=b[2*c],e=b[2*c+1];var j=d.dataset.width,k=d.dataset.height,l=e.dataset.width,m=e.dataset.height,n=Math.min(k,m),o=i*(j/(k/n)+l/(m/n))/f,p=100*(j/(k/n)/((j/(k/n)+l/(m/n)+o)/f))/f,q=100*(l/(m/n)/((j/(k/n)+l/(m/n)+o)/f))/f,r=f-(j/(k/n)/((j/(k/n)+l/(m/n)+o)/f)+l/(m/n)/((j/(k/n)+l/(m/n)+o)/f));h.attr(d,"style","width: "+p+"%"),h.attr(e,"style","margin-left:"+r+"px; width: "+q+"%")}}if(!h.hasClass(this.sec,"multiple-even")&&b.length>0){var s=b[b.length-1];console.info("We have an odd image: ",s)}},this.selectNone=function(){var a=window.getSelection();a.removeAllRanges(),this.unselectImages()},this.getData=function(a,b){var c=a.dataset.iedoc;return c&&this.objData[c]&&this.objData[c][b]?this.objData[c][b]:null},this.setData=function(a,b,c){var d=a.dataset.iedoc;return d||(d="ied"+Math.floor(1e5*Math.random()),a.dataset.iedoc=d),this.objData[d]||(this.objData[d]={}),this.objData[d][b]=c,!0}};var h={create:function(a,b){var d=document.createElement(a);return b!==c&&(d.className=b),d},createText:function(a){var b=document.createTextNode(a);return b},destroy:function(a){a.parentElement.removeChild(a)},attr:function(a,b,c){a.setAttribute(b,c)},is:function(a,b){return a&&null!==a&&a!==c?a.nodeType&&1!==a.nodeType?!1:(b=b.toLowerCase(),b===a.tagName.toLowerCase()):!1},change:function(a,b,c){console.info("Changing to "+b+" node ",a);var d="";c&&(d=a.className);var e=h.create(b);for(e.className=d;a.firstChild;)e.appendChild(a.firstChild);return a.parentNode.insertBefore(e,a),a.parentNode.removeChild(a),e},select:function(a){var b=document.createRange();b.selectNodeContents(a);var c=window.getSelection();c.removeAllRanges(),c.addRange(b)},hasClass:function(a,b){return a.classList.contains(b)},addClass:function(a,b){a.classList.add(b)},removeClass:function(a,b){a.classList.remove(b)},toggleClass:function(a,b){a.classList.toggle(b)},normalize:function(a){a.normalize()},hasParent:function(a,b){for(;;){if(h.is(a,b))return a;if(!a)break;if(h.is(a,"html"))break;a=a.parentElement}return!1},removeAllChildren:function(a,b){for(;a.getElementsByTagName(b).length>0;){var c=a.getElementsByTagName(b)[0];h.destroy(c)}},replaceWith:function(a,b){a.parentNode.insertBefore(b,a),h.destroy(a)},adjustRect:function(a){return{top:a.top+window.pageYOffset-document.documentElement.clientTop,left:a.left+window.pageXOffset-document.documentElement.clientLeft,width:a.width,height:a.height}},getWidth:function(a){return a.offsetWidth},getHeight:function(a){return a.offsetHeight},lastChildOf:function(a,b){if(a.children.length>0){for(var c=a.children[0],d=0;d