Files
galaxy/config/plugins/visualizations/phylocanvas/static/script.js
T
2018-02-11 14:38:19 -05:00

5 lines
56 KiB
JavaScript

require=function(r,e,n){function t(n,o){function i(r){return t(i.resolve(r))}function f(e){return r[n][1][e]||e}if(!e[n]){if(!r[n]){var c="function"==typeof require&&require;if(!o&&c)return c(n,!0);if(u)return u(n,!0);var l=new Error("Cannot find module '"+n+"'");throw l.code="MODULE_NOT_FOUND",l}i.resolve=f;var a=e[n]=new t.Module;r[n][0].call(a.exports,i,a,a.exports)}return e[n].exports}function o(){this.bundle=t,this.exports={}}var u="function"==typeof require&&require;t.Module=o,t.modules=r,t.cache=e,t.parent=u;for(var i=0;i<n.length;i++)t(n[i]);return t}({3:[function(require,module,exports) {
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Phylocanvas=t():e.Phylocanvas=t()}(this,function(){return function(e){var t={};function a(n){if(t[n])return t[n].exports;var r=t[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}return a.m=e,a.c=t,a.p="/dist/",a(0)}([function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.utils=t.nodeRenderers=t.treeTypes=t.Parser=t.Tooltip=t.Prerenderer=t.Branch=t.Tree=void 0;var n=u(a(1)),r=u(a(7)),i=u(a(11)),s=u(a(27)),l=u(a(29)),o=u(a(8)),h=u(a(26)),c=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t}(a(2));function u(e){return e&&e.__esModule?e:{default:e}}function d(e,t,a){var n=e[t]?e:e.prototype,r=n[t];n[t]=function(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return a.call(this,r,t)}}t.Tree=n.default,t.Branch=r.default,t.Prerenderer=i.default,t.Tooltip=s.default,t.Parser=l.default,t.treeTypes=o.default,t.nodeRenderers=h.default,t.utils=c,t.default={plugin:function(e){e.call(this,d)},createTree:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new n.default(e,t)}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),r=a(2),i=h(a(7)),s=a(27),l=h(a(8)),o=h(a(28));function h(e){return e&&e.__esModule?e:{default:e}}var c=r.dom.addClass,u=r.dom.setCursorDrag,d=r.dom.setCursorDragging,f=r.events.fireEvent,v=r.events.addEvent,g=r.events.removeEvent,y=r.canvas.getPixelRatio,p=r.canvas.translateClick,b=r.constants.Predicates,m=function(){function e(t){var a=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._point={x:0,y:0},this.containerElement="string"==typeof t?document.getElementById(t):t,c(this.containerElement,"pc-container"),this.branches={},this.leaves=[],this.root=!1,this.stringRepresentation="",this.backColour=!1,this.originalTree={},"static"===window.getComputedStyle(this.containerElement).position&&(this.containerElement.style.position="relative"),this.containerElement.style.boxSizing="border-box";var r=document.createElement("canvas");r.id=(this.containerElement.id||"")+"__canvas",r.className="phylocanvas",r.style.position="relative",r.height=t.offsetHeight||400,r.width=t.offsetWidth||400,r.style.zIndex="1",this.containerElement.appendChild(r),this.canvas=r.getContext("2d"),this.canvas.canvas.onselectstart=function(){return!1},this.canvas.fillStyle="#000000",this.canvas.strokeStyle="#000000",this.canvas.save(),this.collapsedColour="rgba(0, 0, 0, 0.5)",this.defaultCollapsed={},this.tooltip=new s.ChildNodesTooltip(this),this.drawn=!1,this.highlighters=[],this.zoom=1,this.zoomFactor=3,this.disableZoom=!1,this.fillCanvas=!1,this.branchScaling=!0,this.currentBranchScale=1,this.branchScalingStep=1.2,this.pickedup=!1,this.dragging=!1,this.startx=null,this.starty=null,this.baseNodeSize=1,this.origx=null,this.origy=null,this.offsetx=this.canvas.canvas.width/2,this.offsety=this.canvas.canvas.height/2,this.selectedColour="rgba(49,151,245,1)",this.highlightColour="rgba(49,151,245,1)",this.highlightWidth=4,this.highlightSize=2,this.branchColour="rgba(0,0,0,1)",this.branchScalar=1,this.padding=50,this.labelPadding=5,this.multiSelect=!0,this.clickFlag="selected",this.clickFlagPredicate=b.tautology,this.hoverLabel=!1,this.internalNodesSelectable=!0,this.showLabels=!0,this.showBranchLengthLabels=!1,this.branchLengthLabelPredicate=b.tautology,this.showInternalNodeLabels=!1,this.internalLabelStyle={colour:this.branchColour,textSize:this.textSize,font:this.font,format:""},this.setTreeType("radial"),this.maxBranchLength=0,this.lineWidth=1,this.textSize=7,this.font="sans-serif",this.unselectOnClickAway=!0,this.farthestNodeFromRootX=0,this.farthestNodeFromRootY=0,this.shiftKeyDrag=!1,this.maxLabelLength={},Object.assign(this,n),this.resizeToContainer(),this.eventListeners={};var i=Object.assign({click:{listener:this.clicked.bind(this)},mousedown:{listener:this.pickup.bind(this)},mouseup:{listener:this.drop.bind(this)},mouseout:{listener:this.drop.bind(this)},mousemove:{target:this.canvas.canvas,listener:this.drag.bind(this)},mousewheel:{target:this.canvas.canvas,listener:this.scroll.bind(this)},DOMMouseScroll:{target:this.canvas.canvas,listener:this.scroll.bind(this)},resize:{target:window,listener:function(){a.resizeToContainer(),a.draw()}}},n.eventListeners||{}),l=!0,o=!1,h=void 0;try{for(var u,d=Object.keys(i)[Symbol.iterator]();!(l=(u=d.next()).done);l=!0){var f=u.value,v=i[f],g=v.listener,y=v.target;this.addListener(f,g,y)}}catch(e){o=!0,h=e}finally{try{!l&&d.return&&d.return()}finally{if(o)throw h}}}return n(e,[{key:"removeEventListeners",value:function(){var e=!0,t=!1,a=void 0;try{for(var n,r=Object.keys(this.eventListeners)[Symbol.iterator]();!(e=(n=r.next()).done);e=!0){var i=n.value,s=!0,l=!1,o=void 0;try{for(var h,c=this.eventListeners[i][Symbol.iterator]();!(s=(h=c.next()).done);s=!0){var u=h.value,d=u.target,f=u.listener;g(d||this.containerElement,i,f)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}}}catch(e){t=!0,a=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw a}}}},{key:"setInitialCollapsedBranches",value:function(){var e,t,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.root;if((e=a.getChildProperties("id"))&&e.length>this.defaultCollapsed.min&&e.length<this.defaultCollapsed.max)a.collapsed=!0;else for(t=0;t<a.children.length;t++)this.setInitialCollapsedBranches(a.children[t])}},{key:"getNodeAtMousePosition",value:function(e){var t;return(t=this.root).clicked.apply(t,function(e){if(Array.isArray(e)){for(var t=0,a=Array(e.length);t<e.length;t++)a[t]=e[t];return a}return Array.from(e)}(p(e,this)))}},{key:"getSelectedNodeIds",value:function(){return this.getNodeIdsWithFlag("selected")}},{key:"getNodeIdsWithFlag",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return this.leaves.reduce(function(a,n){return n[e]===t&&a.push(n.id),a},[])}},{key:"clicked",value:function(e){var t;if(0===e.button){var a=[];if(this.dragging)return void(this.dragging=!1);if(!this.root)return!1;t=this.getNodeAtMousePosition(e);var n=this.multiSelect&&(e.metaKey||e.ctrlKey);if(t&&t.interactive)if(n){if(t.leaf)t[this.clickFlag]=!t[this.clickFlag];else if(this.internalNodesSelectable){var r=t.getChildProperties(this.clickFlag).some(function(e){return!1===e});t.cascadeFlag(this.clickFlag,r,this.clickFlagPredicate)}a=this.getNodeIdsWithFlag(this.clickFlag),this.draw()}else this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),(this.internalNodesSelectable||t.leaf)&&(t.cascadeFlag(this.clickFlag,!0,this.clickFlagPredicate),a=t.getChildProperties("id")),this.draw();else!this.unselectOnClickAway||this.dragging||n||(this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),this.draw());this.pickedup||(this.dragging=!1),this.nodesUpdated(a,this.clickFlag)}}},{key:"drag",value:function(e){var t=y(this.canvas);if(!this.drawn)return!1;if(this.pickedup){var a=(e.clientX-this.startx)*t,n=(e.clientY-this.starty)*t;Math.abs(a)+Math.abs(n)>5&&(this.dragging=!0,this.offsetx=this.origx+a,this.offsety=this.origy+n,this.draw())}else{var r=e,i=this.getNodeAtMousePosition(r);i&&i.interactive&&(this.internalNodesSelectable||i.leaf)?(this.root.cascadeFlag("hovered",!1),i.hovered=!0,i.leaf||i.hasCollapsedAncestor()||this.tooltip.open(r.clientX,r.clientY,i),this.containerElement.style.cursor="pointer"):(this.tooltip.close(),this.root.cascadeFlag("hovered",!1),this.shiftKeyDrag&&r.shiftKey?u(this.containerElement):this.containerElement.style.cursor="auto"),this.draw()}}},{key:"draw",value:function(e){if(this.highlighters.length=0,0!==this.maxBranchLength){this.canvas.clearRect(0,0,this.canvas.canvas.width,this.canvas.canvas.height),this.canvas.lineCap="round",this.canvas.lineJoin="round",this.canvas.strokeStyle=this.branchColour,this.canvas.save(),this.drawn&&!e||(this.prerenderer.run(this),e||this.fitInPanel());var t=y(this.canvas);this.canvas.lineWidth=this.lineWidth/this.zoom,this.canvas.translate(this.offsetx*t,this.offsety*t),this.canvas.scale(this.zoom,this.zoom),this.branchRenderer.render(this,this.root),this.highlighters.forEach(function(e){return e()}),this.drawn=!0,this.canvas.restore()}else this.loadError(new Error("All branches in the tree are identical."))}},{key:"pickup",value:function(e){if(!this.shiftKeyDrag||e.shiftKey){if(!this.drawn)return!1;this.origx=this.offsetx,this.origy=this.offsety,0===e.button&&(this.pickedup=!0,d(this.containerElement)),this.startx=e.clientX,this.starty=e.clientY}}},{key:"drop",value:function(e){if(!this.drawn)return!1;this.pickedup=!1,this.shiftKeyDrag&&e.shiftKey?u(this.containerElement):this.containerElement.style.cursor="auto"}},{key:"scroll",value:function(e){if(!(this.disableZoom||"wheelDelta"in e&&0===e.wheelDelta)){e.preventDefault(),this._point.x=e.offsetX,this._point.y=e.offsetY;var t=e.detail<0||e.wheelDelta>0?1:-1;this.branchScaling&&(e.metaKey||e.ctrlKey)?(this.currentBranchScale*=Math.pow(this.branchScalingStep,t),this.setBranchScale(this.currentBranchScale,this._point)):this.smoothZoom(t,this._point)}}},{key:"findLeaves",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id",a=[],n=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(n=(s=l.next()).done);n=!0){var o=s.value;o[t]&&o[t].match(e)&&a.push(o)}}catch(e){r=!0,i=e}finally{try{!n&&l.return&&l.return()}finally{if(r)throw i}}return a}},{key:"updateLeaves",value:function(e,t,a){var n=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(n=(s=l.next()).done);n=!0){s.value[t]=!a}}catch(e){r=!0,i=e}finally{try{!n&&l.return&&l.return()}finally{if(r)throw i}}var o=!0,h=!1,c=void 0;try{for(var u,d=e[Symbol.iterator]();!(o=(u=d.next()).done);o=!0){u.value[t]=a}}catch(e){h=!0,c=e}finally{try{!o&&d.return&&d.return()}finally{if(h)throw c}}this.nodesUpdated(e.map(function(e){return e.id}),t)}},{key:"clearSelect",value:function(){this.root.cascadeFlag("selected",!1),this.draw()}},{key:"getPngUrl",value:function(){return this.canvas.canvas.toDataURL()}},{key:"load",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t,n=arguments[2];if("function"==typeof t&&(n=t,a={}),n&&(a.callback=n),a.format)this.build(e,o.default[a.format],a);else{var r=!0,i=!1,s=void 0;try{for(var l,h=Object.keys(o.default)[Symbol.iterator]();!(r=(l=h.next()).done);r=!0){var c=l.value,u=o.default[c];if(e.match(u.fileExtension)||e.match(u.validator))return void this.build(e,u,a)}}catch(e){i=!0,s=e}finally{try{!r&&h.return&&h.return()}finally{if(i)throw s}}var d=new Error("String not recognised as a file or a parseable format string");n&&n(d),this.loadError(d)}}},{key:"saveOriginalTree",value:function(){this.originalTree.branches=this.branches,this.originalTree.leaves=this.leaves,this.originalTree.root=this.root,this.originalTree.branchLengths={},this.originalTree.parents={}}},{key:"clearState",value:function(){this.root=!1,this.leaves=[],this.branches={},this.drawn=!1}},{key:"extractNestedBranches",value:function(){this.branches={},this.leaves=[],this.storeNode(this.root),this.root.extractChildren()}},{key:"saveState",value:function(){this.extractNestedBranches(),this.root.branchLength=0,this.maxBranchLength=0,this.root.setTotalLength(),0!==this.maxBranchLength||this.loadError(new Error("All branches in the tree are identical."))}},{key:"build",value:function(e,t,a){var n=this;this.originalTree={},this.clearState(),i.default.lastId=0;var r=new i.default;r.id="root",this.branches.root=r,this.setRoot(r),t.parse({formatString:e,root:r,options:a},function(t){if(t)return a.callback&&a.callback(t),void n.loadError(t);n.stringRepresentation=e,n.saveState(),n.setInitialCollapsedBranches(),n.beforeFirstDraw(),n.draw(),n.saveOriginalTree(),a.callback&&a.callback(),n.loadCompleted()})}},{key:"redrawFromBranch",value:function(e){this.clearState(),this.resetTree(),this.originalTree.branchLengths[e.id]=e.branchLength,this.originalTree.parents[e.id]=e.parent,this.root=e,this.root.parent=!1,this.saveState(),this.draw(),this.subtreeDrawn(e.id)}},{key:"redrawOriginalTree",value:function(){this.load(this.stringRepresentation)}},{key:"storeNode",value:function(e){if(e.id&&""!==e.id||(e.id=i.default.generateId()),this.branches[e.id]&&e!==this.branches[e.id]){if(e.leaf)throw new Error("Two nodes on this tree share the id "+e.id);e.id=i.default.generateId()}this.branches[e.id]=e,e.leaf&&this.leaves.push(e)}},{key:"setNodeSize",value:function(e){this.baseNodeSize=Number(e),this.draw()}},{key:"setRoot",value:function(e){e.tree=this,this.root=e}},{key:"setTextSize",value:function(e){this.textSize=Number(e),this.draw()}},{key:"setFontSize",value:function(e){this.textSize=this.calculateFontSize?this.calculateFontSize(e):Math.min(e/2,15),this.canvas.font=this.textSize+"pt "+this.font}},{key:"setTreeType",value:function(e,t){if(!(e in l.default))return f(this.containerElement,"error",{error:new Error('"'+e+'" is not a known tree-type.')});var a=this.treeType;this.treeType=e,this.type=l.default[e],this.branchRenderer=l.default[e].branchRenderer,this.prerenderer=l.default[e].prerenderer,this.labelAlign=l.default[e].labelAlign,this.calculateFontSize=l.default[e].calculateFontSize,this.drawn&&(this.drawn=!1,this.draw()),t||this.treeTypeChanged(a,e)}},{key:"setSize",value:function(e,t){this.canvas.canvas.width=e,this.canvas.canvas.height=t,this.navigator&&this.navigator.resize(),this.adjustForPixelRatio()}},{key:"adjustForPixelRatio",value:function(){var e=y(this.canvas);this.canvas.canvas.style.height=this.canvas.canvas.height+"px",this.canvas.canvas.style.width=this.canvas.canvas.width+"px",e>1&&(this.canvas.canvas.width*=e,this.canvas.canvas.height*=e)}},{key:"getCentrePoint",value:function(){var e=y(this.canvas);return{x:this.canvas.canvas.width/2/e,y:this.canvas.canvas.height/2/e}}},{key:"setZoom",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getCentrePoint(),a=t.x,n=t.y;if(e>0){var r=this.zoom;this.zoom=e,this.offsetx=this.calculateZoomedOffset(this.offsetx,a,r,e),this.offsety=this.calculateZoomedOffset(this.offsety,n,r,e),this.draw()}}},{key:"smoothZoom",value:function(e,t){this.setZoom(Math.pow(10,Math.log(this.zoom)/Math.log(10)+e*this.zoomFactor*.01),t)}},{key:"calculateZoomedOffset",value:function(e,t,a,n){return-1*((-1*e+t)/a*n-t)}},{key:"setBranchScale",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:this.canvas.canvas.width/2,y:this.canvas.canvas.height/2},a=l.default[this.treeType];if(a.branchScalingAxis&&!(e<0)){var n=this.branchScalar;this.branchScalar=this.initialBranchScalar*e;var r=this.branchScalar/n,i=this["offset"+a.branchScalingAxis],s=t[a.branchScalingAxis],o=(t[a.branchScalingAxis]-i)*r+i;this["offset"+a.branchScalingAxis]+=s-o,this.draw()}}},{key:"toggleLabels",value:function(){this.showLabels=!this.showLabels,this.draw()}},{key:"setMaxLabelLength",value:function(){var e;void 0===this.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=0);for(var t=0;t<this.leaves.length;t++)(e=this.canvas.measureText(this.leaves[t].id)).width>this.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=e.width)}},{key:"loadStarted",value:function(){f(this.containerElement,"loading")}},{key:"beforeFirstDraw",value:function(){f(this.containerElement,"beforeFirstDraw")}},{key:"loadCompleted",value:function(){f(this.containerElement,"loaded")}},{key:"loadError",value:function(e){f(this.containerElement,"error",{error:e})}},{key:"subtreeDrawn",value:function(e){f(this.containerElement,"subtree",{node:e})}},{key:"nodesUpdated",value:function(e,t){var a=arguments.length>2&&void 0!==arguments[2]&&arguments[2];f(this.containerElement,"updated",{nodeIds:e,property:t,append:a})}},{key:"treeTypeChanged",value:function(e,t){f(this.containerElement,"typechanged",{oldType:e,newType:t})}},{key:"addListener",value:function(e,t,a){this.eventListeners[e]||(this.eventListeners[e]=[]),this.eventListeners[e].push({listener:t,target:a}),v(a||this.containerElement,e,t)}},{key:"removeListener",value:function(e,t,a){g(a||this.containerElement,e,t)}},{key:"getBounds",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.leaves,t=e===this.leaves?this.root:e[0],a=t.startx,n=t.startx,r=t.starty,i=t.starty,s=!0,l=!1,o=void 0;try{for(var h,c=e[Symbol.iterator]();!(s=(h=c.next()).done);s=!0){var u=h.value.getBounds();a=Math.min(a,u.minx),n=Math.max(n,u.maxx),r=Math.min(r,u.miny),i=Math.max(i,u.maxy)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}return[[a,r],[n,i]]}},{key:"fitInPanel",value:function(e){this.zoom=1;var t=this.getBounds(e),a=[this.canvas.canvas.width-2*this.padding,this.canvas.canvas.height-2*this.padding],n=[t[1][0]-t[0][0],t[1][1]-t[0][1]],r=y(this.canvas),i=a[0]/n[0],s=a[1]/n[1];this.zoom=Math.min(i,s),this.offsetx=-1*t[0][0]*this.zoom,this.offsety=-1*t[0][1]*this.zoom,i>s?(this.offsetx+=this.padding+(a[0]-n[0]*this.zoom)/2,this.offsety+=this.padding):(this.offsetx+=this.padding,this.offsety+=this.padding+(a[1]-n[1]*this.zoom)/2),this.offsetx=this.offsetx/r,this.offsety=this.offsety/r}},{key:"resetTree",value:function(){if(this.originalTree.branches){this.branches=this.originalTree.branches;var e=!0,t=!1,a=void 0;try{for(var n,r=Object.keys(this.originalTree.branchLengths)[Symbol.iterator]();!(e=(n=r.next()).done);e=!0){var i=n.value;this.branches[i].branchLength=this.originalTree.branchLengths[i],this.branches[i].parent=this.originalTree.parents[i]}}catch(e){t=!0,a=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw a}}this.leaves=this.originalTree.leaves,this.root=this.originalTree.root}}},{key:"rotateBranch",value:function(e){this.branches[e.id].rotate()}},{key:"exportNwk",value:function(){var e=this.root.getNwk();return e.substr(0,e.lastIndexOf(")")+1)+";"}},{key:"resizeToContainer",value:function(){this.setSize(this.containerElement.offsetWidth,this.containerElement.offsetHeight)}},{key:"cleanup",value:function(){this.removeEventListeners()}},{key:"alignLabels",get:function(){return this.showLabels&&this.labelAlign&&this.labelAlignEnabled},set:function(e){this.labelAlignEnabled=e}}]),e}();m.prototype.on=m.prototype.addListener,m.prototype.off=m.prototype.removeListener,t.default=m},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.events=t.dom=t.constants=t.canvas=void 0;var n=l(a(3)),r=l(a(6)),i=l(a(4)),s=l(a(5));function l(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&(t[a]=e[a]);return t.default=e,t}t.canvas=n,t.constants=r,t.dom=i,t.events=s},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getBackingStorePixelRatio=n,t.getPixelRatio=r,t.translateClick=function(e,t){var a=r(t.canvas);return[(e.offsetX-t.offsetx)/t.zoom*a,(e.offsetY-t.offsety)/t.zoom*a]},t.translatePoint=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,a=e.y,n=arguments[1],i=r(n.canvas);return{x:(t-n.offsetx)/n.zoom*i,y:(a-n.offsety)/n.zoom*i}},t.undoPointTranslation=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,a=e.y,n=arguments[1],i=r(n.canvas);return{x:t/i*n.zoom+n.offsetx,y:a/i*n.zoom+n.offsety}};a(4);function n(e){return e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||1}function r(e){return(window.devicePixelRatio||1)/n(e)}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createBlobUrl=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text/plain;charset=utf-8",a=new Blob([e],{type:t});return r.createObjectURL(a)},t.setupDownloadLink=function(e,t){var a=document.createElement("a"),i=void 0!==a.download;a.href=e,a.target="_blank",i&&(a.download=t);(0,n.fireEvent)(a,"click"),i&&r.revokeObjectURL(a.href)},t.getX=function(e){var t=0;for(;e;)t+=e.offsetLeft,e=e.offsetParent;return t},t.getY=function(e){var t=0;for(;e;)t+=e.offsetTop,e=e.offsetParent;return t},t.addClass=function(e,t){var a=e.className.split(" ");-1===a.indexOf(t)&&(a.push(t),e.className=a.join(" "))},t.removeClass=function(e,t){var a=e.className.split(" "),n=a.indexOf(t);-1!==n&&(a.splice(n,1),e.className=a.join(" "))},t.hasClass=function(e,t){return-1!==e.className.split(" ").indexOf(t)},t.setCursorDragging=function(e){e.style.cursor="-webkit-grabbing",e.style.cursor="-moz-grabbing",e.style.cursor="grabbing"},t.setCursorDrag=function(e){e.style.cursor="-webkit-grab",e.style.cursor="-moz-grab",e.style.cursor="grab"};var n=a(5),r=window.URL||window.webkitURL},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.preventDefault=function(e){return e.preventDefault(),!1},t.fireEvent=function(e,t){var a,n,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};document.createEvent?(a=document.createEvent("HTMLEvents")).initEvent(t,!0,!0):(a=document.createEventObject()).eventType=t;for(n in a.eventName=t,r)r.hasOwnProperty(n)&&(a[n]=r[n]);document.createEvent?e.dispatchEvent(a):e.fireEvent("on"+a.eventType,a)},t.addEvent=function(e,t,a){e.addEventListener?e.addEventListener(t,a,!1):e.attachEvent("on"+t,function(){return a.call(e,window.event)})},t.removeEvent=function(e,t,a){e.removeEventListener?e.removeEventListener(t,a,!1):console.warn("[Phylocanvas] Unable to remove event, removeEventListener not supported")},t.killEvent=function(e){e.stopPropagation(),e.preventDefault()},t.createHandler=function(e,t){var n;n=(void 0===t?"undefined":a(t))===a("aaa")?function(a){if(e[t])return e[t](a)}:function(){return t(e)};return n}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.Angles={FORTYFIVE:Math.PI/4,QUARTER:Math.PI/2,HALF:Math.PI,FULL:2*Math.PI},t.Shapes={x:"star",s:"square",o:"circle",t:"triangle"},t.Predicates={tautology:function(){return!0},contradiction:function(){return!1},leafOnly:function(e){return e.leaf},nonLeaf:function(e){return!e.leaf}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}(),r=a(2),i=l(a(8)),s=l(a(26));function l(e){return e&&e.__esModule?e:{default:e}}var o=r.constants.Angles,h=r.constants.Shapes,c={minx:0,maxx:0,miny:0,maxy:0},u={lineWidth:null,strokeStyle:null,fillStyle:null},d=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.angle=0,this.branchLength=0,this.centerx=0,this.centery=0,this.children=[],this.collapsed=!1,this.colour=null,this.data={},this.highlighted=!1,this.hovered=!1,this.id="",this.label=null,this.leaf=!0,this.maxChildAngle=0,this.minChildAngle=o.FULL,this.nodeShape="circle",this.parent=null,this.radius=1,this.selected=!1,this.startx=0,this.starty=0,this.totalBranchLength=0,this.tree=null,this.pruned=!1,this.labelStyle={},this.internalLabelStyle=null,this.interactive=!0,this.leafStyle={},this.minx=0,this.miny=0,this.maxx=0,this.maxy=0}return n(e,[{key:"clicked",value:function(e,t){if(this.dragging||this.hasCollapsedAncestor())return null;if(e<this.maxx&&e>this.minx&&t<this.maxy&&t>this.miny)return this;for(var a=this.children.length-1;a>=0;a--){var n=this.children[a].clicked(e,t);if(n)return n}}},{key:"drawLabel",value:function(){var e=this.getTextSize(),t=this.getLabel();this.canvas.font=this.getFontString(),this.labelWidth=this.canvas.measureText(t).width,void 0===this.tree.maxLabelLength[this.tree.treeType]&&(this.tree.maxLabelLength[this.tree.treeType]=0),this.labelWidth>this.tree.maxLabelLength[this.tree.treeType]&&(this.tree.maxLabelLength[this.tree.treeType]=this.labelWidth);var a=this.getLabelStartX();this.tree.alignLabels&&(a+=Math.abs(this.tree.labelAlign.getLabelOffset(this))),this.angle>o.QUARTER&&this.angle<o.HALF+o.QUARTER&&(this.canvas.rotate(o.HALF),a=-a-1*this.labelWidth),this.canvas.beginPath(),this.canvas.fillStyle=this.getTextColour(),this.canvas.fillText(t,a,e/2),this.canvas.closePath(),this.angle>o.QUARTER&&this.angle<o.HALF+o.QUARTER&&this.canvas.rotate(o.HALF)}},{key:"setNodeDimensions",value:function(e,t,a){var n=a;(a*this.tree.zoom<5||!this.leaf)&&(n=5/this.tree.zoom),this.minx=e-n,this.maxx=e+n,this.miny=t-n,this.maxy=t+n}},{key:"getNumberOfLeaves",value:function(){for(var e=0,t=[this];t.length;){var a=t.pop();if(a.leaf)e++;else{var n=!0,r=!1,i=void 0;try{for(var s,l=a.children[Symbol.iterator]();!(n=(s=l.next()).done);n=!0){var o=s.value;t.push(o)}}catch(e){r=!0,i=e}finally{try{!n&&l.return&&l.return()}finally{if(r)throw i}}}}return e}},{key:"drawCollapsed",value:function(e,t){var a=i.default[this.tree.treeType].getCollapsedMeasurements;this.canvas.beginPath();var n=a(this),r=n.angle,s=n.radius,l=this.angle-r/2,o=this.angle+r/2;this.canvas.moveTo(e,t),this.canvas.arc(e,t,s,l,o,!1);var h=this.canvas.createRadialGradient(e,t,s,e,t,.2*s);h.addColorStop(0,"rgba(255, 255, 255, 0)"),h.addColorStop(1,this.tree.collapsedColour||this.getColour()),this.canvas.fillStyle=h,this.canvas.fill(),this.canvas.closePath()}},{key:"drawLabelConnector",value:function(){var e=this.tree,t=e.highlightColour,a=e.labelAlign;this.canvas.save(),this.canvas.lineWidth=this.canvas.lineWidth/4,this.canvas.strokeStyle=this.isHighlighted?t:this.getColour(),this.canvas.beginPath(),this.canvas.moveTo(this.getRadius(),0),this.canvas.lineTo(a.getLabelOffset(this)+this.getDiameter(),0),this.canvas.stroke(),this.canvas.closePath(),this.canvas.restore()}},{key:"drawLeaf",value:function(){var e=this.tree,t=e.alignLabels,a=e.canvas;t&&this.drawLabelConnector(),a.save(),s.default[this.nodeShape](a,this.getRadius(),this.getLeafStyle()),a.restore(),(this.tree.showLabels||this.tree.hoverLabel&&this.isHighlighted)&&this.drawLabel()}},{key:"drawHighlight",value:function(e,t){this.canvas.save(),this.canvas.beginPath(),this.canvas.strokeStyle=this.tree.highlightColour,this.canvas.lineWidth=this.getHighlightLineWidth();var a=this.getHighlightRadius();this.canvas.arc(e,t,a,0,o.FULL,!1),this.canvas.stroke(),this.canvas.closePath(),this.canvas.restore()}},{key:"drawBranchLabels",value:function(){this.canvas.save();var e=this.internalLabelStyle||this.tree.internalLabelStyle;this.canvas.fillStyle=e.colour,this.canvas.font=e.format+" "+e.textSize+"pt "+e.font,this.canvas.textBaseline="middle",this.canvas.textAlign="center";var t=2*this.canvas.measureText("M").width/3,a="y"===this.tree.type.branchScalingAxis?this.centerx:(this.startx+this.centerx)/2,n="x"===this.tree.type.branchScalingAxis?this.centery:(this.starty+this.centery)/2;this.tree.showBranchLengthLabels&&this.tree.branchLengthLabelPredicate(this)&&this.canvas.fillText(this.branchLength.toFixed(2),a,n+t),this.tree.showInternalNodeLabels&&!this.leaf&&this.label&&this.canvas.fillText(this.label,a,n-t),this.canvas.restore()}},{key:"drawNode",value:function(){var e=this.getRadius(),t=e,a=this.leaf?t*Math.cos(this.angle)+this.centerx:this.centerx,n=this.leaf?t*Math.sin(this.angle)+this.centery:this.centery;this.setNodeDimensions(a,n,e),this.collapsed?this.drawCollapsed(a,n):this.leaf&&(this.canvas.save(),this.canvas.translate(this.centerx,this.centery),this.canvas.rotate(this.angle),this.drawLeaf(),this.canvas.restore()),this.isHighlighted&&this.tree.highlighters.push(this.drawHighlight.bind(this,a,n)),(this.tree.root!==this&&this.tree.showBranchLengthLabels||this.tree.showInternalNodeLabels)&&this.drawBranchLabels()}},{key:"getChildProperties",value:function(e){if(this.leaf)return[this[e]];for(var t=[],a=0;a<this.children.length;a++)t=t.concat(this.children[a].getChildProperties(e));return t}},{key:"getChildCount",value:function(){if(this.leaf)return 1;for(var e=0,t=0;t<this.children.length;t++)e+=this.children[t].getChildCount();return e}},{key:"getChildYTotal",value:function(){if(this.leaf)return this.centery;for(var e=0,t=0;t<this.children.length;t++)e+=this.children[t].getChildYTotal();return e}},{key:"cascadeFlag",value:function(e,t,a){if(void 0===this[e])throw new Error("Unknown property: "+e);(void 0===a||a(this,e,t))&&(this[e]=t);var n=!0,r=!1,i=void 0;try{for(var s,l=this.children[Symbol.iterator]();!(n=(s=l.next()).done);n=!0){s.value.cascadeFlag(e,t,a)}}catch(e){r=!0,i=e}finally{try{!n&&l.return&&l.return()}finally{if(r)throw i}}}},{key:"reset",value:function(){var e;for(this.startx=0,this.starty=0,this.centerx=0,this.centery=0,this.angle=null,this.minChildAngle=o.FULL,this.maxChildAngle=0,e=0;e<this.children.length;e++)try{this.children[void 0].reset()}catch(e){return e}}},{key:"redrawTreeFromBranch",value:function(){this.collapsed&&this.expand(),this.tree.redrawFromBranch(this)}},{key:"extractChildren",value:function(){var e=!0,t=!1,a=void 0;try{for(var n,r=this.children[Symbol.iterator]();!(e=(n=r.next()).done);e=!0){var i=n.value;this.tree.storeNode(i),i.extractChildren()}}catch(e){t=!0,a=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw a}}}},{key:"hasCollapsedAncestor",value:function(){return!!this.parent&&(this.parent.collapsed||this.parent.hasCollapsedAncestor())}},{key:"collapse",value:function(){this.collapsed=!1===this.leaf}},{key:"expand",value:function(){this.collapsed=!1}},{key:"toggleCollapsed",value:function(){this.collapsed?this.expand():this.collapse()}},{key:"setTotalLength",value:function(){var e;for(this.parent?(this.totalBranchLength=this.parent.totalBranchLength+this.branchLength,this.totalBranchLength>this.tree.maxBranchLength&&(this.tree.maxBranchLength=this.totalBranchLength)):(this.totalBranchLength=this.branchLength,this.tree.maxBranchLength=this.totalBranchLength),e=0;e<this.children.length;e++)this.children[e].setTotalLength()}},{key:"addChild",value:function(e){e.parent=this,e.tree=this.tree,this.leaf=!1,this.children.push(e)}},{key:"getChildColours",value:function(){var e=[];return this.children.forEach(function(t){var a=0===t.children.length?t.colour:t.getColour();-1===e.indexOf(a)&&e.push(a)}),e}},{key:"getColour",value:function(e){return this.selected?this.tree.selectedColour:e||this.colour||this.tree.branchColour}},{key:"getNwk",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this.leaf?this.label+":"+this.branchLength:"("+this.children.map(function(e){return e.getNwk(!1)}).join(",")+"):"+this.branchLength+(e?";":"")}},{key:"getTextColour",value:function(){if(this.selected)return this.tree.selectedColour;if(this.isHighlighted)return this.tree.highlightColour;if(this.tree.backColour&&this.children.length){var e=this.getChildColours();if(1===e.length)return e[0]}return this.labelStyle.colour||this.colour||this.tree.branchColour}},{key:"getLabel",value:function(){return void 0!==this.label&&null!==this.label?this.label:""}},{key:"getTextSize",value:function(){return this.labelStyle.textSize||this.tree.textSize}},{key:"getFontString",value:function(){var e=this.labelStyle.font||this.tree.font;return(this.labelStyle.format||"")+" "+this.getTextSize()+"pt "+e}},{key:"getLabelSize",value:function(){return this.canvas.font=this.getFontString(),this.canvas.measureText(this.getLabel()).width}},{key:"getRadius",value:function(){var e=this.tree.baseNodeSize;return this.leaf?e*this.radius:e/this.radius}},{key:"getDiameter",value:function(){return 2*this.getRadius()}},{key:"hasLabelConnector",value:function(){return!!this.tree.alignLabels&&this.tree.labelAlign.getLabelOffset(this)>this.getDiameter()}},{key:"getLabelStartX",value:function(){this.getLeafStyle().lineWidth;var e=this.hasLabelConnector(),t=this.getDiameter();return this.isHighlighted&&!e&&(t+=this.getHighlightSize()-this.getRadius()),t+Math.min(this.tree.labelPadding,this.tree.labelPadding/this.tree.zoom)}},{key:"getHighlightLineWidth",value:function(){return this.tree.highlightWidth/this.tree.zoom}},{key:"getHighlightRadius",value:function(){var e=this.getHighlightLineWidth()*this.tree.highlightSize;return e+=this.getLeafStyle().lineWidth/this.tree.highlightSize,this.leaf?this.getRadius()+e:.666*e}},{key:"getHighlightSize",value:function(){return this.getHighlightRadius()+this.getHighlightLineWidth()}},{key:"rotate",value:function(){for(var e=[],t=this.children.length;t--;)e.push(this.children[t]);this.children=e,this.tree.extractNestedBranches(),this.tree.draw(!0)}},{key:"getChildNo",value:function(){return this.parent.children.indexOf(this)}},{key:"setDisplay",value:function(e){var t=e.colour,a=e.shape,n=e.size,r=e.leafStyle,i=e.labelStyle;t&&(this.colour=t),a&&(this.nodeShape=h[a]?h[a]:a),n&&(this.radius=n),r&&(this.leafStyle=r),i&&(this.labelStyle=i)}},{key:"getTotalLength",value:function(){var e=this.getRadius();return(this.tree.showLabels||this.tree.hoverLabel&&this.isHighlighted)&&(e+=this.getLabelStartX()+this.getLabelSize()),e}},{key:"getBounds",value:function(){var e=this.tree,t=e.alignLabels?e.labelAlign.getX(this):this.centerx,a=e.alignLabels?e.labelAlign.getY(this):this.centery,n=this.getRadius(),r=this.getTotalLength(),i=void 0,s=void 0,l=void 0,h=void 0;this.angle>o.QUARTER&&this.angle<o.HALF+o.QUARTER?(i=t+r*Math.cos(this.angle),l=a+r*Math.sin(this.angle),s=t-n,h=a-n):(i=t-n,l=a-n,s=t+r*Math.cos(this.angle),h=a+r*Math.sin(this.angle));var u=e.prerenderer.getStep(e)/2;return c.minx=Math.min(i,s,t-u),c.miny=Math.min(l,h,a-u),c.maxx=Math.max(i,s,t+u),c.maxy=Math.max(l,h,a+u),c}},{key:"getLeafStyle",value:function(){var e=this.leafStyle,t=e.strokeStyle,a=e.fillStyle,n=this.tree.zoom;u.strokeStyle=this.getColour(t),u.fillStyle=this.getColour(a);var r=void 0!==this.leafStyle.lineWidth?this.leafStyle.lineWidth:this.tree.lineWidth;return u.lineWidth=r/n,u}},{key:"isHighlighted",get:function(){return this.highlighted||this.hovered}},{key:"canvas",get:function(){return this.tree.canvas}}],[{key:"generateId",value:function(){return"pcn"+this.lastId++}}]),e}();d.lastId=0,t.default=d},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a(9)),r=o(a(14)),i=o(a(17)),s=o(a(20)),l=o(a(23));function o(e){return e&&e.__esModule?e:{default:e}}t.default={rectangular:n.default,circular:r.default,radial:i.default,diagonal:s.default,hierarchical:l.default}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a(10)),r=o(a(11)),i=o(a(12)),s=o(a(13)),l=a(6);function o(e){return e&&e.__esModule?e:{default:e}}t.default={branchRenderer:new n.default(i.default),prerenderer:new r.default(s.default),labelAlign:{getX:function(e){return e.tree.farthestNodeFromRootX*e.tree.currentBranchScale},getY:function(e){return e.centery},getLabelOffset:function(e){return e.tree.farthestNodeFromRootX*e.tree.currentBranchScale-e.centerx}},branchScalingAxis:"x",getCollapsedMeasurements:function(e){return{angle:l.Angles.QUARTER,radius:e.tree.step*e.getNumberOfLeaves()}}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();var n=function(){function e(t){if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t||!t.draw)throw new Error("`draw` function is required for branch renderers");this.draw=t.draw,this.prepareChild=t.prepareChild}return a(e,[{key:"render",value:function(e,t,a){var n;if(!a&&t&&(t.selected?t.canvas.fillStyle=e.selectedColour:t.canvas.fillStyle=t.colour,t.canvas.strokeStyle=t.getColour(),this.draw(e,t),!t.pruned))for(t.drawNode(),n=0;n<t.children.length;n++)this.prepareChild&&this.prepareChild(t,t.children[n]),this.render(e,t.children[n],t.collapsed||a)}}]),e}();t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();var n=function(){function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.getStep=t.getStep,this.calculate=t.calculate}return a(e,[{key:"run",value:function(e){var t=this.getStep(e);e.root.startx=0,e.root.starty=0,e.root.centerx=0,e.root.centery=0,e.farthestNodeFromRootX=0,e.farthestNodeFromRootY=0,e.currentBranchScale=1,e.step=t,this.calculate(e,t),e.initialBranchScalar=e.branchScalar,e.root.startx=e.root.centerx,e.root.starty=e.root.centery,e.setFontSize(t),e.setMaxLabelLength()}}]),e}();t.default=n},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={draw:function(e,t){var a=t.branchLength*e.branchScalar;t.angle=0,t.parent&&(t.centerx=t.startx+a),t.canvas.beginPath(),t.canvas.moveTo(t.startx,t.starty),t.canvas.lineTo(t.startx,t.centery),t.canvas.lineTo(t.centerx,t.centery),t.canvas.stroke(),t.canvas.closePath()},prepareChild:function(e,t){t.startx=e.centerx,t.starty=e.centery}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={getStep:function(e){return e.fillCanvas?e.canvas.canvas.height/e.leaves.length:Math.max(e.canvas.canvas.height/e.leaves.length,e.leaves[0].getDiameter()+e.labelPadding)},calculate:function(e,t){e.branchScalar=e.canvas.canvas.width/e.maxBranchLength;for(var a=0;a<e.leaves.length;a++){e.leaves[a].angle=0,e.leaves[a].centery=a>0?e.leaves[a-1].centery+t:0,e.leaves[a].centerx=e.leaves[a].totalBranchLength*e.branchScalar,e.leaves[a].centerx>e.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[a].centerx),e.leaves[a].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[a].centery);for(var n=e.leaves[a];n.parent;n=n.parent){var r=n.parent.children;n.parent.centery=(r[0].centery+r[r.length-1].centery)/2}}}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a(10)),r=l(a(11)),i=l(a(15)),s=l(a(16));function l(e){return e&&e.__esModule?e:{default:e}}var o={getX:function(e){return e.centerx+e.labelOffsetX+e.getDiameter()*Math.cos(e.angle)},getY:function(e){return e.centery+e.labelOffsetY+e.getDiameter()*Math.sin(e.angle)},getLabelOffset:function(e){return e.labelOffsetX/Math.cos(e.angle)}};t.default={branchRenderer:new n.default(i.default),prerenderer:new r.default(s.default),labelAlign:o,getCollapsedMeasurements:function(e){var t=e.tree,a=t.maxBranchLength,n=t.branchScalar,r=t.step;return{angle:e.getNumberOfLeaves()*r,radius:(a-e.totalBranchLength)*n}},calculateFontSize:function(e){return Math.min(10*e+4,40)}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={draw:function(e,t){var a=t.totalBranchLength*e.branchScalar;t.canvas.beginPath(),t.canvas.moveTo(t.startx,t.starty),t.canvas.lineTo(t.centerx,t.centery),t.canvas.stroke(),t.canvas.closePath(),t.canvas.strokeStyle=t.getColour(),t.children.length>1&&!t.collapsed&&(t.canvas.beginPath(),t.canvas.arc(0,0,a,t.minChildAngle,t.maxChildAngle,t.maxChildAngle<t.minChildAngle),t.canvas.stroke(),t.canvas.closePath())}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(2).constants.Angles;t.default={getStep:function(e){return n.FULL/e.leaves.length},calculate:function(e,t){e.branchScalar=Math.min(e.canvas.canvas.width,e.canvas.canvas.height)/e.maxBranchLength;var a=e.leaves.length*e.leaves[0].getDiameter()/n.FULL;e.branchScalar*e.maxBranchLength>a?a=e.branchScalar*e.maxBranchLength:e.branchScalar=a/e.maxBranchLength;for(var r=0;r<e.leaves.length;r++){var i=e.leaves[r];for(i.angle=t*r,i.startx=i.parent.totalBranchLength*e.branchScalar*Math.cos(i.angle),i.starty=i.parent.totalBranchLength*e.branchScalar*Math.sin(i.angle),i.centerx=i.totalBranchLength*e.branchScalar*Math.cos(i.angle),i.centery=i.totalBranchLength*e.branchScalar*Math.sin(i.angle),i.labelOffsetX=a*Math.cos(i.angle)-i.centerx,i.labelOffsetY=a*Math.sin(i.angle)-i.centery;i.parent&&(0===i.getChildNo()&&(i.parent.angle=i.angle,i.parent.minChildAngle=i.angle),i.getChildNo()===i.parent.children.length-1);i=i.parent)i.parent.maxChildAngle=i.angle,i.parent.angle=(i.parent.minChildAngle+i.parent.maxChildAngle)/2,i.parent.startx=(i.parent.totalBranchLength-i.parent.branchLength)*e.branchScalar*Math.cos(i.parent.angle),i.parent.starty=(i.parent.totalBranchLength-i.parent.branchLength)*e.branchScalar*Math.sin(i.parent.angle),i.parent.centerx=i.parent.totalBranchLength*e.branchScalar*Math.cos(i.parent.angle),i.parent.centery=i.parent.totalBranchLength*e.branchScalar*Math.sin(i.parent.angle)}}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=l(a(10)),r=l(a(11)),i=l(a(18)),s=l(a(19));function l(e){return e&&e.__esModule?e:{default:e}}t.default={branchRenderer:new n.default(i.default),prerenderer:new r.default(s.default),getCollapsedMeasurements:function(e){var t=e.tree,a=t.maxBranchLength,n=t.branchScalar,r=t.step;return{angle:e.getNumberOfLeaves()*r,radius:(a-e.totalBranchLength)*n}},calculateFontSize:function(e){return Math.min(50*e+5,15)}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={draw:function(e,t){t.canvas.beginPath(),t.canvas.moveTo(t.startx,t.starty),t.canvas.lineTo(t.centerx,t.centery),t.canvas.stroke(),t.canvas.closePath()}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(2).constants.Angles;t.default={getStep:function(e){return n.FULL/e.leaves.length},calculate:function(e,t){e.branchScalar=Math.min(e.canvas.canvas.width,e.canvas.canvas.height)/e.maxBranchLength;for(var a=0;a<e.leaves.length;a+=1){e.leaves[a].angle=t*a,e.leaves[a].centerx=e.leaves[a].totalBranchLength*e.branchScalar*Math.cos(e.leaves[a].angle),e.leaves[a].centery=e.leaves[a].totalBranchLength*e.branchScalar*Math.sin(e.leaves[a].angle);for(var n=e.leaves[a];n.parent&&(0===n.getChildNo()&&(n.parent.angle=0),n.parent.angle+=n.angle*n.getChildCount(),n.getChildNo()===n.parent.children.length-1);n=n.parent)n.parent.angle=n.parent.angle/n.parent.getChildCount()}!function e(t,a){a.parent?(a.startx=a.parent.centerx,a.starty=a.parent.centery):(a.startx=0,a.starty=0),a.centerx=a.startx+a.branchLength*t.branchScalar*Math.cos(a.angle),a.centery=a.starty+a.branchLength*t.branchScalar*Math.sin(a.angle);for(var n=0;n<a.children.length;n++)e(t,a.children[n])}(e,e.root)}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a(10)),r=o(a(11)),i=o(a(21)),s=o(a(22)),l=a(6);function o(e){return e&&e.__esModule?e:{default:e}}t.default={branchRenderer:new n.default(i.default),prerenderer:new r.default(s.default),calculateFontSize:function(e){return Math.min(e/2,10)},getCollapsedMeasurements:function(e){return{angle:l.Angles.QUARTER,radius:e.tree.step*e.getNumberOfLeaves()}}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={draw:function(e,t){t.angle=0,t.canvas.beginPath(),t.canvas.moveTo(t.startx,t.starty),t.canvas.lineTo(t.centerx,t.centery),t.canvas.stroke(),t.canvas.closePath()},prepareChild:function(e,t){t.startx=e.centerx,t.starty=e.centery}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(2).constants.Angles;t.default={getStep:function(e){return Math.max(e.canvas.canvas.height/e.leaves.length,e.leaves[0].getDiameter()+e.labelPadding)},calculate:function(e,t){for(var a=0;a<e.leaves.length;a++){e.leaves[a].centerx=0,e.leaves[a].centery=a>0?e.leaves[a-1].centery+t:0,e.leaves[a].angle=0;for(var r=e.leaves[a];r.parent&&r.getChildNo()===r.parent.children.length-1;r=r.parent){r.parent.centery=r.parent.getChildYTotal()/r.parent.getChildCount(),r.parent.centerx=r.parent.children[0].centerx+(r.parent.children[0].centery-r.parent.centery)*Math.tan(n.FORTYFIVE);for(var i=0;i<r.parent.children.length;i++)r.parent.children[i].startx=r.parent.centerx,r.parent.children[i].starty=r.parent.centery}}}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=o(a(10)),r=o(a(11)),i=o(a(24)),s=o(a(25)),l=a(6);function o(e){return e&&e.__esModule?e:{default:e}}t.default={branchRenderer:new n.default(i.default),prerenderer:new r.default(s.default),labelAlign:{getX:function(e){return e.centerx},getY:function(e){return e.tree.farthestNodeFromRootY*e.tree.currentBranchScale},getLabelOffset:function(e){return e.tree.farthestNodeFromRootY*e.tree.currentBranchScale-e.centery}},branchScalingAxis:"y",getCollapsedMeasurements:function(e){return{angle:l.Angles.QUARTER,radius:e.tree.step*e.getNumberOfLeaves()}}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={draw:function(e,t){var a=t.branchLength*e.branchScalar;t.parent&&(t.centery=t.starty+a),t.canvas.beginPath(),t!==t.tree.root&&(t.canvas.moveTo(t.startx,t.starty),t.canvas.lineTo(t.centerx,t.starty)),t.canvas.lineTo(t.centerx,t.centery),t.canvas.stroke(),t.canvas.closePath()},prepareChild:function(e,t){t.startx=e.centerx,t.starty=e.centery}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(2).constants.Angles;t.default={getStep:function(e){return e.fillCanvas?e.canvas.canvas.width/e.leaves.length:Math.max(e.canvas.canvas.width/e.leaves.length,e.leaves[0].getDiameter()+e.labelPadding)},calculate:function(e,t){e.branchScalar=e.canvas.canvas.height/e.maxBranchLength;for(var a=0;a<e.leaves.length;a++){e.leaves[a].angle=n.QUARTER,e.leaves[a].centerx=a>0?e.leaves[a-1].centerx+t:0,e.leaves[a].centery=e.leaves[a].totalBranchLength*e.branchScalar;for(var r=e.leaves[a];r.parent&&(0===r.getChildNo()&&(r.parent.centerx=r.centerx),r.getChildNo()===r.parent.children.length-1);r=r.parent){r.parent.angle=n.QUARTER,r.parent.centerx=(r.parent.centerx+r.centerx)/2,r.parent.centery=r.parent.totalBranchLength*e.branchScalar;for(var i=0;i<r.parent.children.length;i++)r.parent.children[i].startx=r.parent.centerx,r.parent.children[i].starty=r.parent.centery}e.leaves[a].centerx>e.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[a].centerx),e.leaves[a].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[a].centery)}}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(2).constants.Angles;function r(e,t){e.beginPath(),e.moveTo(0,0),e.lineTo(t,0),e.stroke(),e.closePath()}function i(e,t){var a=t.lineWidth,n=t.strokeStyle,r=t.fillStyle;e.lineWidth=a,e.strokeStyle=n,e.fillStyle=r,e.fill(),a>0&&n!==r&&e.stroke()}var s=function(e){return e*Math.sqrt(2)};t.default={circle:function(e,t,a){var l=Math.pow(s(t),2),o=Math.sqrt(l/Math.PI);r(e,t-o),e.beginPath(),e.arc(t,0,o,0,n.FULL,!1),e.closePath(),i(e,a)},square:function(e,t,a){var n=s(t),l=t-n/2;r(e,l),e.beginPath(),e.moveTo(l,0),e.lineTo(l,n/2),e.lineTo(l+n,n/2),e.lineTo(l+n,-n/2),e.lineTo(l,-n/2),e.lineTo(l,0),e.closePath(),i(e,a)},star:function(e,t,a){var n=t,s=t,l=.5*s,o=Math.PI/5;r(e,s-l);var h=Math.PI/2*3;e.beginPath(),e.moveTo(n,0-s);for(var c=0;c<5;c++){var u=n+Math.cos(h)*s,d=0+Math.sin(h)*s;e.lineTo(u,d),h+=o,u=n+Math.cos(h)*l,d=0+Math.sin(h)*l,e.lineTo(u,d),h+=o}e.lineTo(n,0-s),e.closePath(),i(e,a)},triangle:function(e,t,a){var n=2*t*Math.cos(30*Math.PI/180),s=Math.sqrt(3)/2*n,l=1/Math.sqrt(3)*(n/2);r(e,t-l),e.beginPath(),e.moveTo(t,l),e.lineTo(t+n/2,l),e.lineTo(t,-(s-l)),e.lineTo(t-n/2,l),e.lineTo(t,l),e.closePath(),i(e,a)}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(t){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=a.className,i=void 0===r?"phylocanvas-tooltip":r,s=a.element,l=void 0===s?document.createElement("div"):s,o=a.zIndex,h=void 0===o?2e3:o,c=a.parent,u=void 0===c?t.containerElement:c;n(this,e),this.tree=t,this.element=l,this.element.className=i,this.element.style.display="none",this.element.style.position="fixed",this.element.style.zIndex=h,this.closed=!0,u.appendChild(this.element)}return a(e,[{key:"close",value:function(){this.element.style.display="none",this.closed=!0}},{key:"open",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,a=arguments[2];this.element.hasChildNodes();)this.element.removeChild(this.element.firstChild);this.createContent(a),this.element.style.top=t+"px",this.element.style.left=e+"px",this.element.style.display="block",this.closed=!1}},{key:"createContent",value:function(){throw new Error("Not implemented")}}]),e}();t.default=r;t.ChildNodesTooltip=function(e){function t(e,a){n(this,t);var r=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a));return r.element.style.background="rgba(97, 97, 97, 0.9)",r.element.style.color="#fff",r.element.style.cursor="pointer",r.element.style.padding="8px",r.element.style.marginTop="16px",r.element.style.borderRadius="2px",r.element.style.textAlign="center",r.element.style.fontFamily=r.tree.font||"sans-serif",r.element.style.fontSize="10px",r.element.style.fontWeight="500",r}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r),a(t,[{key:"createContent",value:function(e){var t=document.createTextNode(e.getChildProperties("id").length);this.element.appendChild(t)}}]),t}()},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=s(a(29)),r=s(a(30)),i=s(a(31));function s(e){return e&&e.__esModule?e:{default:e}}t.default={nexus:new n.default(i.default),newick:new n.default(r.default)}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,a,n){return a&&e(t.prototype,a),n&&e(t,n),t}}();var n=function(){function e(t){var a=t.format,n=t.parseFn,r=t.fileExtension,i=t.validator;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.format=a,this.parseFn=n,this.fileExtension=r,this.validator=i}return a(e,[{key:"parse",value:function(e,t){var a=e.formatString,n=e.root,r=e.options,i=void 0===r?{validate:!0}:r;return a.match(this.validator)||!1===i.validate?this.parseFn({string:a,root:n,options:i},t):t(new Error('Format string does not validate as "'+this.format+'"'))}}]),e}();t.default=n},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,r=a(7),i=(n=r)&&n.__esModule?n:{default:n};function s(e){return this===e}var l=[":",",",")",";"];var o=[")",",",";"];function h(e,t,a){var n=function(e){var t="",a=!0,n=!1,r=void 0;try{for(var i,o=e[Symbol.iterator]();!(a=(i=o.next()).done);a=!0){var h=i.value;if(l.some(s.bind(h)))break;t+=h}}catch(e){n=!0,r=e}finally{try{!a&&o.return&&o.return()}finally{if(n)throw r}}return t}(t.slice(a)),r=a+n.length,h="";return n.match(/\*/)&&function(e,t){var a=e.split("**"),n={};if(t.id=a[0],1!==a.length){a=a[1].split("*");for(var r=0;r<a.length;r+=2){var i=a[r+1];switch(a[r]){case"nsz":n.size=window.parseInt(i);break;case"nsh":n.shape=i;break;case"ncol":n.colour=i}}t.setDisplay(n)}}(n,e),":"===t[r]?(h=function(e){var t="",a=!0,n=!1,r=void 0;try{for(var i,l=e[Symbol.iterator]();!(a=(i=l.next()).done);a=!0){var h=i.value;if(o.some(s.bind(h)))break;t+=h}}catch(e){n=!0,r=e}finally{try{!a&&l.return&&l.return()}finally{if(n)throw r}}return t}(t.slice(r+1)),e.branchLength=Math.max(parseFloat(h),0)):e.branchLength=0,n&&(e.label=n),e.id=n||i.default.generateId(),r+h.length}t.default={format:"newick",fileExtension:/\.nwk$/,validator:/^[\w\W\.\*\:(\),-\/]+;?\s*$/gi,parseFn:function(e,t){for(var a=e.string,n=e.root,r=a.replace(/(\r|\n)/g,""),s=n,l=0;l<r.length;l++){var o=void 0;switch(r[l]){case"(":o=new i.default,s.addChild(o),s=o;break;case")":s=s.parent;break;case",":o=new i.default,s.parent.addChild(o),s=o;break;case";":break;default:try{l=h(s,r,l)}catch(e){return t(e)}}}return t()}}},function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=a(30);t.default={parseFn:function(e,t){var a=e.string,r=e.root,i=e.options;if(!a.match(/BEGIN TREES/gi))return t(new Error("The nexus file does not contain a tree block"));var s=i.name,l=a.match(/BEGIN TREES;[\S\s]+END;/i)[0].replace(/BEGIN TREES;\n/i,"").replace(/END;/i,""),o={},h=l.match(/TRANSLATE[^;]+;/i);if(h&&h.length){h=h[0],l=l.replace(h,"");for(var c=(h=h.replace(/translate|;/gi,"")).split(","),u=0;u<c.length;u++){var d=c[u].trim().replace("\n","").split(" ");d[0]&&d[1]&&(o[d[0].trim()]=d[1].trim())}}for(var f=l.split("\n"),v={},g=0;g<f.length;g++)if(""!==f[g].trim()){var y=f[g].replace(/tree\s/i,"");s||(s=y.trim().match(/^\w+/)[0]),v[s]=y.trim().match(/[\S]*$/)[0]}if(!v[s])return new Error("tree "+s+" does not exist in this NEXUS file");(0,n.parseFn)({string:v[s].trim(),root:r},function(e){if(e)return t(e);if(t(),o){var a=!0,n=!1,i=void 0;try{for(var s,l=Object.keys(o)[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var h=s.value,c=r.tree.branches,u=c[h];delete c[h],u.id=o[h],c[u.id]=u}}catch(e){n=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(n)throw i}}r.tree.draw()}})},format:"nexus",fileExtension:/\.n(ex|xs)$/,validator:/^#NEXUS[\s\n;\w\W\.\*\:(\),-=\[\]\/&]+$/i}}])});
},{}],1:[function(require,module,exports) {
"use strict";var e=require("phylocanvas"),t=r(e);function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}_.extend(window.bundleEntries||{},{load:function(e){var r=e.chart,a=e.dataset,o=e.chart.settings;$.ajax({url:a.download_url,success:function(a){try{var l=t.default.createTree(e.targets[0]);l.setTreeType(o.get("tree_type")),l.showLabels="true"===o.get("show_labels"),l.alignLabels="true"===o.get("align_labels"),l.branchColour=o.get("edge_color"),l.highlightColour=o.get("highlighted_color"),l.selectedColour=o.get("selected_color"),l.setNodeSize(20),l.setTextSize(20),l.lineWidth=2,l.showBootstrap="true"===o.get("show_bootstrap"),l.showInternalNodeLabels=l.showBootstrap,l.internalLabelStyle.colour=l.branchColour,l.internalLabelStyle.font=l.font,l.internalLabelStyle.textSize=l.textSize,l.on("click",function(e){var t=l.getNodeAtMousePosition(e);"true"===o.get("collapse_branch")?(l.branches[t.id].collapsed=!0,l.draw()):"true"===o.get("prune_branch")&&(l.branches[t.id].pruned=!0,l.draw())}),l.load(a);for(var s=0,n=l.leaves.length;s<n;s++)l.leaves[s].nodeShape=o.get("node_shape");l.draw(),r.state("ok","Done."),e.process.resolve(),$(window).resize(function(){l.fitInPanel(l.leaves),l.draw()})}catch(e){r.state("failed",e)}},error:function(){r.state("failed","Failed to access dataset."),e.process.resolve()}})}});
},{"phylocanvas":3}]},{},[1])