From 876c7a2d3df70b1c4edcf4fe738eb51c6e76bcfa Mon Sep 17 00:00:00 2001 From: anuprulez Date: Tue, 28 Mar 2017 17:18:04 +0200 Subject: [PATCH] Adding more features like colors, collapse, prune and resize of the tree --- .../repository/build/biojs_phylocanvas.js | 35 +++- .../repository/build/biojs_phylocanvas.js.map | 2 +- .../static/repository/build/registry.js | 153 +++++++++++------- .../static/repository/build/registry.js.map | 2 +- .../biojs/phylocanvas/config.js | 43 ++++- .../visualizations/biojs/phylocanvas/logo.png | Bin 12119 -> 13808 bytes .../biojs/phylocanvas/wrapper.js | 34 +++- 7 files changed, 202 insertions(+), 67 deletions(-) diff --git a/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js b/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js index 36e8dfb2a21..a7c6fde4a11 100644 --- a/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js +++ b/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js @@ -55,16 +55,45 @@ define(function() { return /******/ (function(modules) { // webpackBootstrap url : dataset.download_url, success : function( content ) { try { - var tree = Phylocanvas.default.createTree( options.targets[ 0 ] ); - console.log(tree); + var tree = Phylocanvas.default.createTree( options.targets[ 0 ] ), + node_size = 20, + text_size = 20, + line_width = 2; // Set different properties of the tree tree.setTreeType( settings.get( 'tree_type' ) ); tree.branchColour = settings.get( 'edge_color' ); - tree.showLabels = settings.get( 'show_label' ) === "true" ? true : false; + tree.showLabels = settings.get( 'show_labels' ) === "true" ? true : false; + tree.alignLabels = settings.get( 'align_labels' ) === "true" ? true : false; + tree.highlightColour = settings.get( 'highlighted_color' ); + tree.selectedColour = settings.get( 'selected_color' ); + tree.setNodeSize( node_size ); + tree.setTextSize( text_size ); + tree.lineWidth = line_width; + + // Register click event on tree + tree.on('click', function (e) { + var node = tree.getNodeAtMousePosition( e ); + // Here collapse action is taking preference. + // Whenver collapse and prune both are selected true, + // collapse action will be performed + // Collapse the selected branch + if( settings.get( 'collapse_branch' ) === "true" ) { + tree.branches[ node.id ].collapsed = true; + tree.draw(); + }// Prune the selected branch + else if( settings.get( 'prune_branch' ) === "true" ) { + tree.branches[ node.id ].pruned = true; + tree.draw(); + } + }); // Draw the phylogenetic tree tree.load( content ); chart.state( 'ok', 'Done.' ); options.process.resolve(); + // Adjust the size of tree on window resize + $( window ).resize( function() { + tree.fitInPanel( tree.leaves ); tree.draw(); + } ); } catch( err ) { chart.state( 'failed', err ); } diff --git a/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js.map b/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js.map index 4a9b8e52ef9..6ab5d88b3d0 100644 --- a/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js.map +++ b/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap dbdd807e8715a3e077aa","webpack:///./static/repository/visualizations/biojs/phylocanvas/wrapper.js","webpack:///./static/repository/utilities/utils.js","webpack:///./static/repository/plugins/biojs/phylocanvas/phylocanvas.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;iECtCA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB;AACrB;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,cAAa;AACb;AACA,MAAK;AACL,EAAC;;;;;;;AChCD;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAc,OAAO;AACrB;AACA;AACA,yBAAwB;AACxB;AACA;AACA;;AAEA;AACA;AACA,eAAc,OAAO;AACrB,eAAc,SAAS;AACvB,eAAc,SAAS;AACvB,eAAc,QAAQ;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA,cAAa;AACb;AACA;;AAEA;AACA;AACA,eAAc,OAAO;AACrB,eAAc,OAAO;AACrB,eAAc,OAAO;AACrB,eAAc,SAAS;AACvB,eAAc,SAAS;AACvB;AACA;AACA;AACA;AACA;AACA,6CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAiB;AACjB;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA,UAAS;AACT;AACA,UAAS;AACT;;AAEA;AACA;AACA,eAAc,OAAO;AACrB,eAAc,OAAO;AACrB;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAC,gJ;;;;;;AC1HD,gBAAe,+IAA2L,iBAAiB,mBAAm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","file":"biojs_phylocanvas.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap dbdd807e8715a3e077aa","define( [ 'utilities/utils', 'plugins/biojs/phylocanvas/phylocanvas' ], function( Utils, Phylocanvas ) {\n return Backbone.Model.extend({\n initialize: function( options ) {\n var chart = options.chart,\n dataset = options.dataset,\n settings = options.chart.settings;\n\n Utils.get( {\n url : dataset.download_url,\n success : function( content ) {\n try {\n var tree = Phylocanvas.default.createTree( options.targets[ 0 ] );\n console.log(tree);\n // Set different properties of the tree\n tree.setTreeType( settings.get( 'tree_type' ) );\n tree.branchColour = settings.get( 'edge_color' );\n tree.showLabels = settings.get( 'show_label' ) === \"true\" ? true : false;\n // Draw the phylogenetic tree\n tree.load( content );\n chart.state( 'ok', 'Done.' );\n options.process.resolve();\n } catch( err ) {\n chart.state( 'failed', err );\n }\n },\n error: function() {\n chart.state( 'failed', 'Failed to access dataset.' );\n options.process.resolve();\n }\n });\n }\n });\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./static/repository/visualizations/biojs/phylocanvas/wrapper.js\n// module id = 0\n// module chunks = 0","/** Useful helper functions */\ndefine( [], function() {\n\n /** Clone */\n function clone( obj ) {\n return JSON.parse( JSON.stringify( obj ) || null );\n };\n\n /**\n * Check if a string is a json string\n * @param{String} text - Content to be validated\n */\n function isJSON(text) {\n return /^[\\],:{}\\s]*$/.test(text.replace(/\\\\[\"\\\\\\/bfnrtu]/g, '@').\n replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']').\n replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''));\n };\n\n /**\n * Request handler for GET\n * @param{String} url - Url request is made to\n * @param{Function} success - Callback on success\n * @param{Function} error - Callback on error\n * @param{Boolean} cache - Use cached data if available\n */\n function get (options) {\n top.__utils__get__ = top.__utils__get__ || {};\n var cache_key = JSON.stringify( options );\n if (options.cache && top.__utils__get__[cache_key]) {\n options.success && options.success(top.__utils__get__[cache_key]);\n window.console.debug('utils.js::get() - Fetching from cache [' + options.url + '].');\n } else {\n request({\n url : options.url,\n data : options.data,\n success : function(response) {\n top.__utils__get__[cache_key] = response;\n options.success && options.success(response);\n },\n error : function(response) {\n options.error && options.error(response);\n }\n });\n }\n };\n\n /**\n * Request handler\n * @param{String} method - Request method ['GET', 'POST', 'DELETE', 'PUT']\n * @param{String} url - Url request is made to\n * @param{Object} data - Data send to url\n * @param{Function} success - Callback on success\n * @param{Function} error - Callback on error\n */\n function request (options) {\n var ajaxConfig = {\n contentType : 'application/json',\n type : options.type || 'GET',\n data : options.data || {},\n url : options.url\n }\n if ( ajaxConfig.type == 'GET' || ajaxConfig.type == 'DELETE' ) {\n if ( !$.isEmptyObject(ajaxConfig.data) ) {\n ajaxConfig.url += ajaxConfig.url.indexOf('?') == -1 ? '?' : '&';\n ajaxConfig.url += $.param(ajaxConfig.data, true);\n }\n ajaxConfig.data = null;\n } else {\n ajaxConfig.dataType = 'json';\n ajaxConfig.url = ajaxConfig.url;\n ajaxConfig.data = JSON.stringify( ajaxConfig.data );\n }\n $.ajax( ajaxConfig ).done( function( response ) {\n if ( typeof response === 'string' && isJSON( response ) ) {\n try {\n response = response.replace( 'Infinity,', '\"Infinity\",' );\n response = jQuery.parseJSON( response );\n } catch ( e ) {\n console.debug( e );\n }\n }\n options.success && options.success( response );\n }).fail( function( response ) {\n var response_text = null;\n try {\n response_text = jQuery.parseJSON( response.responseText );\n } catch (e) {\n response_text = response.responseText;\n }\n options.error && options.error( response_text, response );\n }).always( function() {\n options.complete && options.complete();\n });\n };\n\n /**\n * Safely merge to dictionaries\n * @param{Object} options - Target dictionary\n * @param{Object} optionsDefault - Source dictionary\n */\n function merge (options, optionsDefault) {\n if (options) {\n return _.defaults(options, optionsDefault);\n } else {\n return optionsDefault;\n }\n };\n\n /** Create a unique id */\n function uid(){\n top.__utils__uid__ = top.__utils__uid__ || 0;\n return 'uid-' + top.__utils__uid__++;\n };\n\n return {\n get : get,\n merge : merge,\n uid : uid,\n request : request,\n clone : clone,\n isJSON : isJSON\n };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./static/repository/utilities/utils.js\n// module id = 1\n// module chunks = 0","!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){function t(a){if(n[a])return n[a].exports;var r=n[a]={exports:{},id:a,loaded:!1};return e[a].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p=\"/dist/\",t(0)}([function(e,t,n){\"use strict\";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=e[t]?e:e.prototype,r=a[t];a[t]=function(){for(var e=arguments.length,t=Array(e),a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return new h.default(e,t)}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 o=n(1),h=r(o),c=n(7),u=r(c),d=n(11),f=r(d),v=n(27),g=r(v),y=n(29),p=r(y),b=n(8),m=r(b),x=n(26),S=r(x),k=n(2),w=a(k);t.Tree=h.default,t.Branch=u.default,t.Prerenderer=f.default,t.Tooltip=g.default,t.Parser=p.default,t.treeTypes=m.default,t.nodeRenderers=S.default,t.utils=w,t.default={plugin:s,createTree:l}},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};i(this,e),this._point={x:0,y:0},this.containerElement=\"string\"==typeof t?document.getElementById(t):t,g(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 c.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=w.tautology,this.hoverLabel=!1,this.internalNodesSelectable=!0,this.showLabels=!0,this.showBranchLengthLabels=!1,this.branchLengthLabelPredicate=w.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,a),this.resizeToContainer(),this.eventListeners={};var s=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(){n.resizeToContainer(),n.draw()}}},a.eventListeners||{}),l=!0,o=!1,h=void 0;try{for(var u,d=Object.keys(s)[Symbol.iterator]();!(l=(u=d.next()).done);l=!0){var f=u.value,v=s[f],y=v.listener,p=v.target;this.addListener(f,y,p)}}catch(e){o=!0,h=e}finally{try{!l&&d.return&&d.return()}finally{if(o)throw h}}}return s(e,[{key:\"removeEventListeners\",value:function(){var e=!0,t=!1,n=void 0;try{for(var a,r=Object.keys(this.eventListeners)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.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;x(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,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}}},{key:\"setInitialCollapsedBranches\",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.root;if(e=n.getChildProperties(\"id\"),e&&e.length>this.defaultCollapsed.min&&e.length1&&void 0!==arguments[1])||arguments[1];return this.leaves.reduce(function(n,a){return a[e]===t&&n.push(a.id),n},[])}},{key:\"clicked\",value:function(e){var t;if(0===e.button){var n=[];if(this.dragging)return void(this.dragging=!1);if(!this.root)return!1;t=this.getNodeAtMousePosition(e);var a=this.multiSelect&&(e.metaKey||e.ctrlKey);if(t&&t.interactive)if(a){if(t.leaf)t[this.clickFlag]=!t[this.clickFlag];else if(this.internalNodesSelectable){var r=t.getChildProperties(this.clickFlag).some(function(e){return e===!1});t.cascadeFlag(this.clickFlag,r,this.clickFlagPredicate)}n=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),n=t.getChildProperties(\"id\")),this.draw();else!this.unselectOnClickAway||this.dragging||a||(this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),this.draw());this.pickedup||(this.dragging=!1),this.nodesUpdated(n,this.clickFlag)}}},{key:\"drag\",value:function(e){var t=S(this.canvas);if(!this.drawn)return!1;if(this.pickedup){var n=(e.clientX-this.startx)*t,a=(e.clientY-this.starty)*t;Math.abs(n)+Math.abs(a)>5&&(this.dragging=!0,this.offsetx=this.origx+n,this.offsety=this.origy+a,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?y(this.containerElement):this.containerElement.style.cursor=\"auto\"),this.draw()}}},{key:\"draw\",value:function(e){if(this.highlighters.length=0,0===this.maxBranchLength)return void this.loadError(new Error(\"All branches in the tree are identical.\"));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=S(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()}},{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,p(this.containerElement)),this.startx=e.clientX,this.starty=e.clientY}}},{key:\"drop\",value:function(e){return!!this.drawn&&(this.pickedup=!1,void(this.shiftKeyDrag&&e.shiftKey?y(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\",n=[],a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]&&o[t].match(e)&&n.push(o)}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}return n}},{key:\"updateLeaves\",value:function(e,t,n){var a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]=!n}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}var h=!0,c=!1,u=void 0;try{for(var d,f=e[Symbol.iterator]();!(h=(d=f.next()).done);h=!0){var v=d.value;v[t]=n}}catch(e){c=!0,u=e}finally{try{!h&&f.return&&f.return()}finally{if(c)throw u}}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]:{},n=arguments[2],a=t,r=n;if(\"function\"==typeof t&&(r=t,a={}),r&&(a.callback=r),a.format)return void this.build(e,v.default[a.format],a);var i=!0,s=!1,l=void 0;try{for(var o,h=Object.keys(v.default)[Symbol.iterator]();!(i=(o=h.next()).done);i=!0){var c=o.value,u=v.default[c];if(e.match(u.fileExtension)||e.match(u.validator))return void this.build(e,u,a)}}catch(e){s=!0,l=e}finally{try{!i&&h.return&&h.return()}finally{if(s)throw l}}var d=new Error(\"String not recognised as a file or a parseable format string\");r&&r(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(){if(this.extractNestedBranches(),this.root.branchLength=0,this.maxBranchLength=0,this.root.setTotalLength(),0===this.maxBranchLength)return void this.loadError(new Error(\"All branches in the tree are identical.\"))}},{key:\"build\",value:function(e,t,n){var a=this;this.originalTree={},this.clearState(),h.default.lastId=0;var r=new h.default;r.id=\"root\",this.branches.root=r,this.setRoot(r),t.parse({formatString:e,root:r,options:n},function(t){return t?(n.callback&&n.callback(t),void a.loadError(t)):(a.stringRepresentation=e,a.saveState(),a.setInitialCollapsedBranches(),a.beforeFirstDraw(),a.draw(),a.saveOriginalTree(),n.callback&&n.callback(),void a.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=h.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=h.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 d.default))return b(this.containerElement,\"error\",{error:new Error('\"'+e+'\" is not a known tree-type.')});var n=this.treeType;this.treeType=e,this.type=d.default[e],this.branchRenderer=d.default[e].branchRenderer,this.prerenderer=d.default[e].prerenderer,this.labelAlign=d.default[e].labelAlign,this.calculateFontSize=d.default[e].calculateFontSize,this.drawn&&(this.drawn=!1,this.draw()),t||this.treeTypeChanged(n,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=S(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=S(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(),n=t.x,a=t.y;if(e>0){var r=this.zoom;this.zoom=e,this.offsetx=this.calculateZoomedOffset(this.offsetx,n,r,e),this.offsety=this.calculateZoomedOffset(this.offsety,a,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,n,a){return-1*((-1*e+t)/n*a-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},n=d.default[this.treeType];if(n.branchScalingAxis&&!(e<0)){var a=this.branchScalar;this.branchScalar=this.initialBranchScalar*e;var r=this.branchScalar/a,i=this[\"offset\"+n.branchScalingAxis],s=t[n.branchScalingAxis],l=(t[n.branchScalingAxis]-i)*r+i;this[\"offset\"+n.branchScalingAxis]+=s-l,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;tthis.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=e.width)}},{key:\"loadStarted\",value:function(){b(this.containerElement,\"loading\")}},{key:\"beforeFirstDraw\",value:function(){b(this.containerElement,\"beforeFirstDraw\")}},{key:\"loadCompleted\",value:function(){b(this.containerElement,\"loaded\")}},{key:\"loadError\",value:function(e){b(this.containerElement,\"error\",{error:e})}},{key:\"subtreeDrawn\",value:function(e){b(this.containerElement,\"subtree\",{node:e})}},{key:\"nodesUpdated\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];b(this.containerElement,\"updated\",{nodeIds:e,property:t,append:n})}},{key:\"treeTypeChanged\",value:function(e,t){b(this.containerElement,\"typechanged\",{oldType:e,newType:t})}},{key:\"addListener\",value:function(e,t,n){this.eventListeners[e]||(this.eventListeners[e]=[]),this.eventListeners[e].push({listener:t,target:n}),m(n||this.containerElement,e,t)}},{key:\"removeListener\",value:function(e,t,n){x(n||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],n=t.startx,a=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,d=u.getBounds();n=Math.min(n,d.minx),a=Math.max(a,d.maxx),r=Math.min(r,d.miny),i=Math.max(i,d.maxy)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}return[[n,r],[a,i]]}},{key:\"fitInPanel\",value:function(e){this.zoom=1;var t=this.getBounds(e),n=[this.canvas.canvas.width-2*this.padding,this.canvas.canvas.height-2*this.padding],a=[t[1][0]-t[0][0],t[1][1]-t[0][1]],r=S(this.canvas),i=n[0]/a[0],s=n[1]/a[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+(n[0]-a[0]*this.zoom)/2,this.offsety+=this.padding):(this.offsetx+=this.padding,this.offsety+=this.padding+(n[1]-a[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,n=void 0;try{for(var a,r=Object.keys(this.originalTree.branchLengths)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.value;this.branches[i].branchLength=this.originalTree.branchLengths[i],this.branches[i].parent=this.originalTree.parents[i]}}catch(e){t=!0,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}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}();L.prototype.on=L.prototype.addListener,L.prototype.off=L.prototype.removeListener,t.default=L},function(e,t,n){\"use strict\";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,\"__esModule\",{value:!0}),t.events=t.dom=t.constants=t.canvas=void 0;var r=n(3),i=a(r),s=n(6),l=a(s),o=n(4),h=a(o),c=n(5),u=a(c);t.canvas=i,t.constants=l,t.dom=h,t.events=u},function(e,t,n){\"use strict\";function a(e){return e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||1}function r(e){return(window.devicePixelRatio||1)/a(e)}function i(e,t){var n=r(t.canvas);return[(e.offsetX-t.offsetx)/t.zoom*n,(e.offsetY-t.offsety)/t.zoom*n]}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:(t-a.offsetx)/a.zoom*i,y:(n-a.offsety)/a.zoom*i}}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:t/i*a.zoom+a.offsetx,y:n/i*a.zoom+a.offsety}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getBackingStorePixelRatio=a,t.getPixelRatio=r,t.translateClick=i,t.translatePoint=s,t.undoPointTranslation=l;n(4)},function(e,t,n){\"use strict\";function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"text/plain;charset=utf-8\",n=new Blob([e],{type:t});return f.createObjectURL(n)}function r(e,t){var n=document.createElement(\"a\"),a=\"undefined\"!=typeof n.download;n.href=e,n.target=\"_blank\",a&&(n.download=t),(0,d.fireEvent)(n,\"click\"),a&&f.revokeObjectURL(n.href)}function i(e){for(var t=0;e;)t+=e.offsetLeft,e=e.offsetParent;return t}function s(e){for(var t=0;e;)t+=e.offsetTop,e=e.offsetParent;return t}function l(e,t){var n=e.className.split(\" \");n.indexOf(t)===-1&&(n.push(t),e.className=n.join(\" \"))}function o(e,t){var n=e.className.split(\" \"),a=n.indexOf(t);a!==-1&&(n.splice(a,1),e.className=n.join(\" \"))}function h(e,t){var n=e.className.split(\" \"),a=n.indexOf(t);return a!==-1}function c(e){e.style.cursor=\"-webkit-grabbing\",e.style.cursor=\"-moz-grabbing\",e.style.cursor=\"grabbing\"}function u(e){e.style.cursor=\"-webkit-grab\",e.style.cursor=\"-moz-grab\",e.style.cursor=\"grab\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.createBlobUrl=a,t.setupDownloadLink=r,t.getX=i,t.getY=s,t.addClass=l,t.removeClass=o,t.hasClass=h,t.setCursorDragging=c,t.setCursorDrag=u;var d=n(5),f=window.URL||window.webkitURL},function(e,t){\"use strict\";function n(e){return e.preventDefault(),!1}function a(e,t){var n,a,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};document.createEvent?(n=document.createEvent(\"HTMLEvents\"),n.initEvent(t,!0,!0)):(n=document.createEventObject(),n.eventType=t),n.eventName=t;for(a in r)r.hasOwnProperty(a)&&(n[a]=r[a]);document.createEvent?e.dispatchEvent(n):e.fireEvent(\"on\"+n.eventType,n)}function r(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent(\"on\"+t,function(){return n.call(e,window.event)})}function i(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):console.warn(\"[Phylocanvas] Unable to remove event, removeEventListener not supported\")}function s(e){e.stopPropagation(),e.preventDefault()}function l(e,t){var n;return n=(\"undefined\"==typeof t?\"undefined\":o(t))===o(\"aaa\")?function(n){if(e[t])return e[t](n)}:function(){return t(e)}}Object.defineProperty(t,\"__esModule\",{value:!0});var o=\"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=n,t.fireEvent=a,t.addEvent=r,t.removeEvent=i,t.killEvent=s,t.createHandler=l},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,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e,t){for(var n=0;nthis.minx&&tthis.miny)return this;for(var n=this.children.length-1;n>=0;n--){var a=this.children[n].clicked(e,t);if(a)return a}}},{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 n=this.getLabelStartX();this.tree.alignLabels&&(n+=Math.abs(this.tree.labelAlign.getLabelOffset(this))),this.angle>u.QUARTER&&this.angleu.QUARTER&&this.anglethis.tree.maxBranchLength&&(this.tree.maxBranchLength=this.totalBranchLength)):(this.totalBranchLength=this.branchLength,this.tree.maxBranchLength=this.totalBranchLength),e=0;e0&&void 0!==arguments[0])||arguments[0];if(this.leaf)return this.label+\":\"+this.branchLength;var t=this.children.map(function(e){return e.getNwk(!1)});return\"(\"+t.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:\"\";\n}},{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(){var e=this.getLeafStyle(),t=(e.lineWidth,this.hasLabelConnector()),n=this.getDiameter();return this.isHighlighted&&!t&&(n+=this.getHighlightSize()-this.getRadius()),n+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,n=e.shape,a=e.size,r=e.leafStyle,i=e.labelStyle;t&&(this.colour=t),n&&(this.nodeShape=d[n]?d[n]:n),a&&(this.radius=a),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,n=e.alignLabels?e.labelAlign.getY(this):this.centery,a=this.getRadius(),r=this.getTotalLength(),i=void 0,s=void 0,l=void 0,o=void 0;this.angle>u.QUARTER&&this.angle0?e.leaves[n-1].centery+t:0,e.leaves[n].centerx=e.leaves[n].totalBranchLength*e.branchScalar,e.leaves[n].centerx>e.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery);for(var a=e.leaves[n];a.parent;a=a.parent){var r=a.parent.children;a.parent.centery=(r[0].centery+r[r.length-1].centery)/2}}}}},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(10),i=a(r),s=n(11),l=a(s),o=n(15),h=a(o),c=n(16),u=a(c),d={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 i.default(h.default),prerenderer:new l.default(u.default),labelAlign:d,getCollapsedMeasurements:function(e){var t=e.tree,n=t.maxBranchLength,a=t.branchScalar,r=t.step;return{angle:e.getNumberOfLeaves()*r,radius:(n-e.totalBranchLength)*a}},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 n=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,n,t.minChildAngle,t.maxChildAngle,t.maxChildAnglen?n=e.branchScalar*e.maxBranchLength:e.branchScalar=n/e.maxBranchLength;for(var a=0;a0?e.leaves[n-1].centery+t:0,e.leaves[n].angle=0;for(var a=e.leaves[n];a.parent&&a.getChildNo()===a.parent.children.length-1;a=a.parent){a.parent.centery=a.parent.getChildYTotal()/a.parent.getChildCount(),a.parent.centerx=a.parent.children[0].centerx+(a.parent.children[0].centery-a.parent.centery)*Math.tan(r.FORTYFIVE);for(var i=0;i0?e.leaves[n-1].centerx+t:0,e.leaves[n].centery=e.leaves[n].totalBranchLength*e.branchScalar;for(var a=e.leaves[n];a.parent&&(0===a.getChildNo()&&(a.parent.centerx=a.centerx),a.getChildNo()===a.parent.children.length-1);a=a.parent){a.parent.angle=r.QUARTER,a.parent.centerx=(a.parent.centerx+a.centerx)/2,a.parent.centery=a.parent.totalBranchLength*e.branchScalar;for(var i=0;ie.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery)}}}},function(e,t,n){\"use strict\";function a(e,t){e.beginPath(),e.moveTo(0,0),e.lineTo(t,0),e.stroke(),e.closePath()}function r(e,t){var n=t.lineWidth,a=t.strokeStyle,r=t.fillStyle;e.lineWidth=n,e.strokeStyle=a,e.fillStyle=r,e.fill(),n>0&&a!==r&&e.stroke()}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(2),s=i.constants.Angles,l=function(e){return e*Math.sqrt(2)};t.default={circle:function(e,t,n){var i=Math.pow(l(t),2),o=Math.sqrt(i/Math.PI);a(e,t-o),e.beginPath(),e.arc(t,0,o,0,s.FULL,!1),e.closePath(),r(e,n)},square:function(e,t,n){var i=l(t),s=t-i/2;a(e,s),e.beginPath(),e.moveTo(s,0),e.lineTo(s,i/2),e.lineTo(s+i,i/2),e.lineTo(s+i,-i/2),e.lineTo(s,-i/2),e.lineTo(s,0),e.closePath(),r(e,n)},star:function(e,t,n){var i=t,s=0,l=5,o=t,h=.5*o,c=Math.PI/l;a(e,o-h);var u=Math.PI/2*3;e.beginPath(),e.moveTo(i,s-o);for(var d=0;d1&&void 0!==arguments[1]?arguments[1]:{},a=n.className,i=void 0===a?\"phylocanvas-tooltip\":a,s=n.element,l=void 0===s?document.createElement(\"div\"):s,o=n.zIndex,h=void 0===o?2e3:o,c=n.parent,u=void 0===c?t.containerElement:c;r(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 i(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,n=arguments[2];this.element.hasChildNodes();)this.element.removeChild(this.element.firstChild);this.createContent(n),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=s;t.ChildNodesTooltip=function(e){function t(e,a){r(this,t);var i=n(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a));return i.element.style.background=\"rgba(97, 97, 97, 0.9)\",i.element.style.color=\"#fff\",i.element.style.cursor=\"pointer\",i.element.style.padding=\"8px\",i.element.style.marginTop=\"16px\",i.element.style.borderRadius=\"2px\",i.element.style.textAlign=\"center\",i.element.style.fontFamily=i.tree.font||\"sans-serif\",i.element.style.fontSize=\"10px\",i.element.style.fontWeight=\"500\",i}return a(t,e),i(t,[{key:\"createContent\",value:function(e){var t=document.createTextNode(e.getChildProperties(\"id\").length);this.element.appendChild(t)}}]),t}(s)},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(29),i=a(r),s=n(30),l=a(s),o=n(31),h=a(o);t.default={nexus:new i.default(h.default),newick:new i.default(l.default)}},function(e,t){\"use strict\";function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(t,\"__esModule\",{value:!0});var a=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};return new h.default(e,t)}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 o=n(1),h=r(o),c=n(7),u=r(c),d=n(11),f=r(d),v=n(27),g=r(v),y=n(29),p=r(y),b=n(8),m=r(b),x=n(26),S=r(x),k=n(2),w=a(k);t.Tree=h.default,t.Branch=u.default,t.Prerenderer=f.default,t.Tooltip=g.default,t.Parser=p.default,t.treeTypes=m.default,t.nodeRenderers=S.default,t.utils=w,t.default={plugin:s,createTree:l}},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};i(this,e),this._point={x:0,y:0},this.containerElement=\"string\"==typeof t?document.getElementById(t):t,g(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 c.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=w.tautology,this.hoverLabel=!1,this.internalNodesSelectable=!0,this.showLabels=!0,this.showBranchLengthLabels=!1,this.branchLengthLabelPredicate=w.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,a),this.resizeToContainer(),this.eventListeners={};var s=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(){n.resizeToContainer(),n.draw()}}},a.eventListeners||{}),l=!0,o=!1,h=void 0;try{for(var u,d=Object.keys(s)[Symbol.iterator]();!(l=(u=d.next()).done);l=!0){var f=u.value,v=s[f],y=v.listener,p=v.target;this.addListener(f,y,p)}}catch(e){o=!0,h=e}finally{try{!l&&d.return&&d.return()}finally{if(o)throw h}}}return s(e,[{key:\"removeEventListeners\",value:function(){var e=!0,t=!1,n=void 0;try{for(var a,r=Object.keys(this.eventListeners)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.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;x(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,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}}},{key:\"setInitialCollapsedBranches\",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.root;if(e=n.getChildProperties(\"id\"),e&&e.length>this.defaultCollapsed.min&&e.length1&&void 0!==arguments[1])||arguments[1];return this.leaves.reduce(function(n,a){return a[e]===t&&n.push(a.id),n},[])}},{key:\"clicked\",value:function(e){var t;if(0===e.button){var n=[];if(this.dragging)return void(this.dragging=!1);if(!this.root)return!1;t=this.getNodeAtMousePosition(e);var a=this.multiSelect&&(e.metaKey||e.ctrlKey);if(t&&t.interactive)if(a){if(t.leaf)t[this.clickFlag]=!t[this.clickFlag];else if(this.internalNodesSelectable){var r=t.getChildProperties(this.clickFlag).some(function(e){return e===!1});t.cascadeFlag(this.clickFlag,r,this.clickFlagPredicate)}n=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),n=t.getChildProperties(\"id\")),this.draw();else!this.unselectOnClickAway||this.dragging||a||(this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),this.draw());this.pickedup||(this.dragging=!1),this.nodesUpdated(n,this.clickFlag)}}},{key:\"drag\",value:function(e){var t=S(this.canvas);if(!this.drawn)return!1;if(this.pickedup){var n=(e.clientX-this.startx)*t,a=(e.clientY-this.starty)*t;Math.abs(n)+Math.abs(a)>5&&(this.dragging=!0,this.offsetx=this.origx+n,this.offsety=this.origy+a,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?y(this.containerElement):this.containerElement.style.cursor=\"auto\"),this.draw()}}},{key:\"draw\",value:function(e){if(this.highlighters.length=0,0===this.maxBranchLength)return void this.loadError(new Error(\"All branches in the tree are identical.\"));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=S(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()}},{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,p(this.containerElement)),this.startx=e.clientX,this.starty=e.clientY}}},{key:\"drop\",value:function(e){return!!this.drawn&&(this.pickedup=!1,void(this.shiftKeyDrag&&e.shiftKey?y(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\",n=[],a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]&&o[t].match(e)&&n.push(o)}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}return n}},{key:\"updateLeaves\",value:function(e,t,n){var a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]=!n}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}var h=!0,c=!1,u=void 0;try{for(var d,f=e[Symbol.iterator]();!(h=(d=f.next()).done);h=!0){var v=d.value;v[t]=n}}catch(e){c=!0,u=e}finally{try{!h&&f.return&&f.return()}finally{if(c)throw u}}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]:{},n=arguments[2],a=t,r=n;if(\"function\"==typeof t&&(r=t,a={}),r&&(a.callback=r),a.format)return void this.build(e,v.default[a.format],a);var i=!0,s=!1,l=void 0;try{for(var o,h=Object.keys(v.default)[Symbol.iterator]();!(i=(o=h.next()).done);i=!0){var c=o.value,u=v.default[c];if(e.match(u.fileExtension)||e.match(u.validator))return void this.build(e,u,a)}}catch(e){s=!0,l=e}finally{try{!i&&h.return&&h.return()}finally{if(s)throw l}}var d=new Error(\"String not recognised as a file or a parseable format string\");r&&r(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(){if(this.extractNestedBranches(),this.root.branchLength=0,this.maxBranchLength=0,this.root.setTotalLength(),0===this.maxBranchLength)return void this.loadError(new Error(\"All branches in the tree are identical.\"))}},{key:\"build\",value:function(e,t,n){var a=this;this.originalTree={},this.clearState(),h.default.lastId=0;var r=new h.default;r.id=\"root\",this.branches.root=r,this.setRoot(r),t.parse({formatString:e,root:r,options:n},function(t){return t?(n.callback&&n.callback(t),void a.loadError(t)):(a.stringRepresentation=e,a.saveState(),a.setInitialCollapsedBranches(),a.beforeFirstDraw(),a.draw(),a.saveOriginalTree(),n.callback&&n.callback(),void a.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=h.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=h.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 d.default))return b(this.containerElement,\"error\",{error:new Error('\"'+e+'\" is not a known tree-type.')});var n=this.treeType;this.treeType=e,this.type=d.default[e],this.branchRenderer=d.default[e].branchRenderer,this.prerenderer=d.default[e].prerenderer,this.labelAlign=d.default[e].labelAlign,this.calculateFontSize=d.default[e].calculateFontSize,this.drawn&&(this.drawn=!1,this.draw()),t||this.treeTypeChanged(n,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=S(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=S(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(),n=t.x,a=t.y;if(e>0){var r=this.zoom;this.zoom=e,this.offsetx=this.calculateZoomedOffset(this.offsetx,n,r,e),this.offsety=this.calculateZoomedOffset(this.offsety,a,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,n,a){return-1*((-1*e+t)/n*a-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},n=d.default[this.treeType];if(n.branchScalingAxis&&!(e<0)){var a=this.branchScalar;this.branchScalar=this.initialBranchScalar*e;var r=this.branchScalar/a,i=this[\"offset\"+n.branchScalingAxis],s=t[n.branchScalingAxis],l=(t[n.branchScalingAxis]-i)*r+i;this[\"offset\"+n.branchScalingAxis]+=s-l,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;tthis.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=e.width)}},{key:\"loadStarted\",value:function(){b(this.containerElement,\"loading\")}},{key:\"beforeFirstDraw\",value:function(){b(this.containerElement,\"beforeFirstDraw\")}},{key:\"loadCompleted\",value:function(){b(this.containerElement,\"loaded\")}},{key:\"loadError\",value:function(e){b(this.containerElement,\"error\",{error:e})}},{key:\"subtreeDrawn\",value:function(e){b(this.containerElement,\"subtree\",{node:e})}},{key:\"nodesUpdated\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];b(this.containerElement,\"updated\",{nodeIds:e,property:t,append:n})}},{key:\"treeTypeChanged\",value:function(e,t){b(this.containerElement,\"typechanged\",{oldType:e,newType:t})}},{key:\"addListener\",value:function(e,t,n){this.eventListeners[e]||(this.eventListeners[e]=[]),this.eventListeners[e].push({listener:t,target:n}),m(n||this.containerElement,e,t)}},{key:\"removeListener\",value:function(e,t,n){x(n||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],n=t.startx,a=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,d=u.getBounds();n=Math.min(n,d.minx),a=Math.max(a,d.maxx),r=Math.min(r,d.miny),i=Math.max(i,d.maxy)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}return[[n,r],[a,i]]}},{key:\"fitInPanel\",value:function(e){this.zoom=1;var t=this.getBounds(e),n=[this.canvas.canvas.width-2*this.padding,this.canvas.canvas.height-2*this.padding],a=[t[1][0]-t[0][0],t[1][1]-t[0][1]],r=S(this.canvas),i=n[0]/a[0],s=n[1]/a[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+(n[0]-a[0]*this.zoom)/2,this.offsety+=this.padding):(this.offsetx+=this.padding,this.offsety+=this.padding+(n[1]-a[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,n=void 0;try{for(var a,r=Object.keys(this.originalTree.branchLengths)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.value;this.branches[i].branchLength=this.originalTree.branchLengths[i],this.branches[i].parent=this.originalTree.parents[i]}}catch(e){t=!0,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}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}();L.prototype.on=L.prototype.addListener,L.prototype.off=L.prototype.removeListener,t.default=L},function(e,t,n){\"use strict\";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,\"__esModule\",{value:!0}),t.events=t.dom=t.constants=t.canvas=void 0;var r=n(3),i=a(r),s=n(6),l=a(s),o=n(4),h=a(o),c=n(5),u=a(c);t.canvas=i,t.constants=l,t.dom=h,t.events=u},function(e,t,n){\"use strict\";function a(e){return e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||1}function r(e){return(window.devicePixelRatio||1)/a(e)}function i(e,t){var n=r(t.canvas);return[(e.offsetX-t.offsetx)/t.zoom*n,(e.offsetY-t.offsety)/t.zoom*n]}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:(t-a.offsetx)/a.zoom*i,y:(n-a.offsety)/a.zoom*i}}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:t/i*a.zoom+a.offsetx,y:n/i*a.zoom+a.offsety}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getBackingStorePixelRatio=a,t.getPixelRatio=r,t.translateClick=i,t.translatePoint=s,t.undoPointTranslation=l;n(4)},function(e,t,n){\"use strict\";function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"text/plain;charset=utf-8\",n=new Blob([e],{type:t});return f.createObjectURL(n)}function r(e,t){var n=document.createElement(\"a\"),a=\"undefined\"!=typeof n.download;n.href=e,n.target=\"_blank\",a&&(n.download=t),(0,d.fireEvent)(n,\"click\"),a&&f.revokeObjectURL(n.href)}function i(e){for(var t=0;e;)t+=e.offsetLeft,e=e.offsetParent;return t}function s(e){for(var t=0;e;)t+=e.offsetTop,e=e.offsetParent;return t}function l(e,t){var n=e.className.split(\" \");n.indexOf(t)===-1&&(n.push(t),e.className=n.join(\" \"))}function o(e,t){var n=e.className.split(\" \"),a=n.indexOf(t);a!==-1&&(n.splice(a,1),e.className=n.join(\" \"))}function h(e,t){var n=e.className.split(\" \"),a=n.indexOf(t);return a!==-1}function c(e){e.style.cursor=\"-webkit-grabbing\",e.style.cursor=\"-moz-grabbing\",e.style.cursor=\"grabbing\"}function u(e){e.style.cursor=\"-webkit-grab\",e.style.cursor=\"-moz-grab\",e.style.cursor=\"grab\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.createBlobUrl=a,t.setupDownloadLink=r,t.getX=i,t.getY=s,t.addClass=l,t.removeClass=o,t.hasClass=h,t.setCursorDragging=c,t.setCursorDrag=u;var d=n(5),f=window.URL||window.webkitURL},function(e,t){\"use strict\";function n(e){return e.preventDefault(),!1}function a(e,t){var n,a,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};document.createEvent?(n=document.createEvent(\"HTMLEvents\"),n.initEvent(t,!0,!0)):(n=document.createEventObject(),n.eventType=t),n.eventName=t;for(a in r)r.hasOwnProperty(a)&&(n[a]=r[a]);document.createEvent?e.dispatchEvent(n):e.fireEvent(\"on\"+n.eventType,n)}function r(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent(\"on\"+t,function(){return n.call(e,window.event)})}function i(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):console.warn(\"[Phylocanvas] Unable to remove event, removeEventListener not supported\")}function s(e){e.stopPropagation(),e.preventDefault()}function l(e,t){var n;return n=(\"undefined\"==typeof t?\"undefined\":o(t))===o(\"aaa\")?function(n){if(e[t])return e[t](n)}:function(){return t(e)}}Object.defineProperty(t,\"__esModule\",{value:!0});var o=\"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=n,t.fireEvent=a,t.addEvent=r,t.removeEvent=i,t.killEvent=s,t.createHandler=l},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,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e,t){for(var n=0;nthis.minx&&tthis.miny)return this;for(var n=this.children.length-1;n>=0;n--){var a=this.children[n].clicked(e,t);if(a)return a}}},{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 n=this.getLabelStartX();this.tree.alignLabels&&(n+=Math.abs(this.tree.labelAlign.getLabelOffset(this))),this.angle>u.QUARTER&&this.angleu.QUARTER&&this.anglethis.tree.maxBranchLength&&(this.tree.maxBranchLength=this.totalBranchLength)):(this.totalBranchLength=this.branchLength,this.tree.maxBranchLength=this.totalBranchLength),e=0;e0&&void 0!==arguments[0])||arguments[0];if(this.leaf)return this.label+\":\"+this.branchLength;var t=this.children.map(function(e){return e.getNwk(!1)});return\"(\"+t.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:\"\";\n}},{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(){var e=this.getLeafStyle(),t=(e.lineWidth,this.hasLabelConnector()),n=this.getDiameter();return this.isHighlighted&&!t&&(n+=this.getHighlightSize()-this.getRadius()),n+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,n=e.shape,a=e.size,r=e.leafStyle,i=e.labelStyle;t&&(this.colour=t),n&&(this.nodeShape=d[n]?d[n]:n),a&&(this.radius=a),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,n=e.alignLabels?e.labelAlign.getY(this):this.centery,a=this.getRadius(),r=this.getTotalLength(),i=void 0,s=void 0,l=void 0,o=void 0;this.angle>u.QUARTER&&this.angle0?e.leaves[n-1].centery+t:0,e.leaves[n].centerx=e.leaves[n].totalBranchLength*e.branchScalar,e.leaves[n].centerx>e.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery);for(var a=e.leaves[n];a.parent;a=a.parent){var r=a.parent.children;a.parent.centery=(r[0].centery+r[r.length-1].centery)/2}}}}},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(10),i=a(r),s=n(11),l=a(s),o=n(15),h=a(o),c=n(16),u=a(c),d={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 i.default(h.default),prerenderer:new l.default(u.default),labelAlign:d,getCollapsedMeasurements:function(e){var t=e.tree,n=t.maxBranchLength,a=t.branchScalar,r=t.step;return{angle:e.getNumberOfLeaves()*r,radius:(n-e.totalBranchLength)*a}},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 n=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,n,t.minChildAngle,t.maxChildAngle,t.maxChildAnglen?n=e.branchScalar*e.maxBranchLength:e.branchScalar=n/e.maxBranchLength;for(var a=0;a0?e.leaves[n-1].centery+t:0,e.leaves[n].angle=0;for(var a=e.leaves[n];a.parent&&a.getChildNo()===a.parent.children.length-1;a=a.parent){a.parent.centery=a.parent.getChildYTotal()/a.parent.getChildCount(),a.parent.centerx=a.parent.children[0].centerx+(a.parent.children[0].centery-a.parent.centery)*Math.tan(r.FORTYFIVE);for(var i=0;i0?e.leaves[n-1].centerx+t:0,e.leaves[n].centery=e.leaves[n].totalBranchLength*e.branchScalar;for(var a=e.leaves[n];a.parent&&(0===a.getChildNo()&&(a.parent.centerx=a.centerx),a.getChildNo()===a.parent.children.length-1);a=a.parent){a.parent.angle=r.QUARTER,a.parent.centerx=(a.parent.centerx+a.centerx)/2,a.parent.centery=a.parent.totalBranchLength*e.branchScalar;for(var i=0;ie.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery)}}}},function(e,t,n){\"use strict\";function a(e,t){e.beginPath(),e.moveTo(0,0),e.lineTo(t,0),e.stroke(),e.closePath()}function r(e,t){var n=t.lineWidth,a=t.strokeStyle,r=t.fillStyle;e.lineWidth=n,e.strokeStyle=a,e.fillStyle=r,e.fill(),n>0&&a!==r&&e.stroke()}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(2),s=i.constants.Angles,l=function(e){return e*Math.sqrt(2)};t.default={circle:function(e,t,n){var i=Math.pow(l(t),2),o=Math.sqrt(i/Math.PI);a(e,t-o),e.beginPath(),e.arc(t,0,o,0,s.FULL,!1),e.closePath(),r(e,n)},square:function(e,t,n){var i=l(t),s=t-i/2;a(e,s),e.beginPath(),e.moveTo(s,0),e.lineTo(s,i/2),e.lineTo(s+i,i/2),e.lineTo(s+i,-i/2),e.lineTo(s,-i/2),e.lineTo(s,0),e.closePath(),r(e,n)},star:function(e,t,n){var i=t,s=0,l=5,o=t,h=.5*o,c=Math.PI/l;a(e,o-h);var u=Math.PI/2*3;e.beginPath(),e.moveTo(i,s-o);for(var d=0;d1&&void 0!==arguments[1]?arguments[1]:{},a=n.className,i=void 0===a?\"phylocanvas-tooltip\":a,s=n.element,l=void 0===s?document.createElement(\"div\"):s,o=n.zIndex,h=void 0===o?2e3:o,c=n.parent,u=void 0===c?t.containerElement:c;r(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 i(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,n=arguments[2];this.element.hasChildNodes();)this.element.removeChild(this.element.firstChild);this.createContent(n),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=s;t.ChildNodesTooltip=function(e){function t(e,a){r(this,t);var i=n(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a));return i.element.style.background=\"rgba(97, 97, 97, 0.9)\",i.element.style.color=\"#fff\",i.element.style.cursor=\"pointer\",i.element.style.padding=\"8px\",i.element.style.marginTop=\"16px\",i.element.style.borderRadius=\"2px\",i.element.style.textAlign=\"center\",i.element.style.fontFamily=i.tree.font||\"sans-serif\",i.element.style.fontSize=\"10px\",i.element.style.fontWeight=\"500\",i}return a(t,e),i(t,[{key:\"createContent\",value:function(e){var t=document.createTextNode(e.getChildProperties(\"id\").length);this.element.appendChild(t)}}]),t}(s)},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(29),i=a(r),s=n(30),l=a(s),o=n(31),h=a(o);t.default={nexus:new i.default(h.default),newick:new i.default(l.default)}},function(e,t){\"use strict\";function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(t,\"__esModule\",{value:!0});var a=function(){function e(e,t){for(var n=0;nhuUcbN_(F+CHC$LlKC$&B&5*#6Mc&6(N-k+VlWPaL6z+eJga!(#< zydGc2xO-_Vq@8YU%CStG=e^VQ>Adufw|C+h60YUlBPklUR?TJjgS}g!rEg!kTv8=j zL^?HqRb$gB(9(}W*XHIvb!=ffPr;LVjp@ngbJ%u2 z9n@yANEWf6$xd7h(OX|Hfwzgf|N5e?>uaE)fBYN6C$w04`v}Gd!YBqsfcz7KHq~|Q5%zP4%}H!xn6TlBc<|%HpbtReXGk z(r-dP;YU|s$S+GVUSnx}QJK|RwuAZwRXmXdFwol6uGcohg5?MdS7V4ki9@}-+Zy9* z0)!{@D1ziR^ZGika-;UdMlXd@vP)7zzlS`T&CvxZE@NaP1_eYgq~G@eQs-T>)}u7U zl0?+TsD+c-oKE8<1mmd=vYF$kt`4{4Ap2pGE2sF|1I=lw@!ri%;<5Ynh~J-tMgzUo z&K{#6&rZm@@e!rjDHnQaZdh)fy#V69gt^1Yk~YCRVNshl5uGXuI z;n+)ROmZ>~3`mg-%aK!#DHR zMYf%G{{q~Q$_~W{<9CnM`Wxl@O?NP!n5WT9D0iDsD=Qv(g|)m^W--m_p~Av>9gLHE z*bNVvDw4VH190=%CA0C$=?oo<_W}DVL#I?p!;4#@M+WEdl0-0s+k&PGfj+h>r})lj zATdKn9j656^q;6a9RKQDiF!SIUsJO<_k}^u_)jB7&UQ3KL6jD&!|9wJ-V0icav5b2 zg?-l)x&+tkcIY&9^wKU3-T=M%mC1)pu`P;V52u{?g*I|yl zS3KZicON_F80L!=(-oHGpYvE-=RP`2{_A%fM*nm#Z5DM47WRTkH|Nh-uY{qI)!i29 zciuxVLIxfdHLD=;a8KgABKv`Pk>C)fgYMbtSS(l1kPs1z?!aty(#XfE)!LRpT+t(M zPC5CF1r6LAq8+_{Ex1^EBe;)?qgF)p7p>*(OX|#WE?1QFG^=E*eV4wgZ)n@cs7K0} z=|#+6yfW+-us4`kjqb1rk>*g4Fx}l|O~4&1lq1Ft0%J6HU7xNjX)nf$EqWJwA@ijJ~hS2t4L-b zsWvbhhe6fa?1qyG-D8_HDXzJP8TXv|lxJ@(VW)I@!F!G$Y(LErfxoKRJHg({pyDp+ zD?X-+9AF6j0D=fk zRvh_iq6Fxe+nyXQh^$r!)b4E7l__u=68Rb5$9(PWPHf~gp4;D~ZNYQ*q234Rtj6?Z z;HG`dH~(56H?m*ko-TBx%&PWG+`;daO%~rP&&-sbZsb=0dxc+AOxGkW$B^Xq4X0n# zNsQBzSiGqHX7U5Y7Tz1@4(VFs;joKk2)CIR{G4AcO3BEiCv!#ok)ah`!h1<=_Ml)%wYRPZg`4I71(xW!LaQR}O1ZG#W zDLk%#2PXCDsjM*n-NB+L{rn>dS7jqEF(QPlM2c#wMEGYW`*M|p#{6Mo8#n7G=Jx(R z;@HFb&&Rm!ZIpaS5Wk4`T!r0|Pklp~A~|=@P(OM3fr$6+0GMGAQ&w+JKRy>>Kzrgx zNBv?YpkMcJf*5;~oWf4Vf|dRI_56?Cbl!D7)!9bgY11qOP_QGExqMM^?baU?BBG|6 zrKUS2*}Zrju!t&ePJ?|-H?A_WU{)nFFTlvlk;1b$tWv!icMc17i8MIAI)43l;=Q?a z?=zd{jl$)wc!}fRWp8{Y+S!S7^mtTF7DIbGaXqWHq+dB|;HuP9)9WKk-$lz@?>=V{ z_xPhIg`0F^EZ&R_H!BTt0-@1FX`4) zwx&tD1p9Sf0JiLuP4QBHWh2>qDgu{pZ*8}K4C2hH(8yJFWGyTBkP#z@3MlNBkjkqi|WeL!sbo{GdIB?3lnG7dg`s%HC(v@>$%CA3jpyy!n^+xNdC9ID9m^h zAo@}~b&0IPesuhW+F%VsqpV-!yu+`>seg4of2C8=#=5jJp7~kc4OwKo$=-*7=t1I} zIIIzWxUILkfMKs=BYQDtBol>JjOF3Dg+S%B4xj1F%XG?%ccXb=u)eDcI8AfQ*`&oc zSGbcNAXHvX?X^e-l2EIy*QQOvg`q1;e;;&s`Zj>O6N}5X4rL z(@T**I57IF)mzqebSQ(<7XaHW=dy=YV(qzoQ*n<+zx0|X1hLbJtOu6u*-^eK9J>IU zVOq4)UEb$8Z7>ZoH&@{?NF#VN)HjgXUfp13SgezMg_wP4d54XeS2?DZ7>f?sw9GB= z#bP%j{=8bZ5&dfoe)TV~`uxaqw>)+|7C!ogz;)p1dB<%;_-iKWMkRbg`r=VYo2K)j zYc9z*7++Lmr0LmMceyxkMe2!|yJGhS54{J`^mS+LPyJTKVeFd>FRlGB`m||MQ?%F1 z-8it}-fKl&aW%ciuDJz`#d6eno@FdmV<%9zk^=K_8@W`r>HE#0CGnCm^;zCZ!~!gL zWPPcQcE}C+4mBpIsKo151a=e;JjcgMwY}4S;RY+ZaHnMr7XDuK@vfZ~<)I@Z>6hRu z9zGMq`L@L)t@UNQ-JkTMsH6I3ud%ukAU=Y%p*~?izlMP+=arc>Mx=YlMHo&Vs5a5H z8?n|Av|DcrV0~SEGU>B!RghpZ{Pl7q&9L?21!Sk2Lgx8tS#qaUi&Sv+T~7+iZq*Le z9Iqt1+OY)6SYM;lGP>H|teq+y!?K7Zo5>3~y!%(I9Se7YFQ zee=}7Uem{}jXAV*yd2{e$yMglI7@*MnV~-BUnf4yib|F@+h5M; z=yTAd8!x$%3@30etjK)=zY#;b_Bi0mkM|-Im6(vVpU9%qVLf=QrlcM&HbnVY*T(Wy zK-l?0CNmjU-TR*%voq~#K^rYcTpt@yWmnZ09+1@7w$Vj?${-f3%e2LLDh8BSGs}&M zy8JF>Mw+$TML={q9`hmkwbNA>iBGq-m@*)Ws?dSHn>*Ko$tUkvgGx+vvdX z{QF}XWLmG8hly;OAl;-3+N2hlt%&0cEt0g~(uju#?%ii)sl-g+LO)i&Xi3M-@{Hsg z>cR7q!=7b{kc%yxqvwO-Ow%>(fT&whmQ@04Tlmqr$ep*|uS>s5&QDnu6^^}>;W&=k zpnlLi-v zn4X9%&$8mdZX7ooXQyo&)BJKveb!;iqVHFpjDHj>oe`EvNA4O^`nxr^OlL5w#N zbj3DtVPbce?=s2(Mit>ZDkbDHZ++SHm$OcJu(LdfkGuPJdswrbWO|Q;?7iDvjptG$ zOU*&(iTrRS7(Mw&a%l&&#<^J$RRo!NQe*vf(5qzzUva7!#_z%6Ksr4ID+1|2&Bs+7L zHw-h@mtnAqLFl$yKi%VN&C=qky}v5E>hi|4>gLVf+; z64EgEMBREYYM?$#ueA1=fT2plbf`+t;Gg-2@C5#Wk5_`P?iCZZL$bYz1U1nx`ml7C zIch{Z36TJ>yTaJ*GuTY1-EPNt9)~iDwPT{NHeTRQ^vQrFL&8qSJE$e;)7dA!C&4$; zn49MB7H?|d`^Fd&^ilQT56+1^*ei)Gx_U1!(4 zXx_Nn$SnpCmEWyP8b!MsX-sce?VMWkh|JytRab^32i?Damr1e3lutn1IT2vuSdoO+ z`G>CJVdo+;dA3BFCA46V)P^+*xXIQudP{SSH%a{>g(t`dlr2`K28`+Ts>`A6>4ON* z+wwr1HvQ}j?iwJle`i?u=NTXuL+8eXV(~$58>ClDPY znQL_3E}Knq)G3K09+D*`PbrZDxT7jEjR}L2U{AA^xI5Ks0&HnG#{{L|4a5Dn(1u*q zr*`r8%x##X%hpFfWZo1g(YeabpV~`o#6|#nq%nuHRDz2v@uv<_j6~nRe^*QHb3NgS zj{h(-i{zacxf10W0n}ki68#FX_s+!ojqCd_l`72bJur2p8P7q>E$fd_oxNY;;xf4# z4=mV!l-;DDF4nWJw^Oc_26*kHljdPI!W#eW*L8|e_aB$TQ58&9CJXXcT(fNEs*@|? zy-?KJyPnQ~{&-jn9T%CN`pmH}+D}Z448HR%zFtpcsXA<=!kA%P8 zo$a4FvOQIs{0tA~+1+8T;LvhY z)O%Pb!+bCu4BoHro)vbHm~#6B{I?d<1p&_S2}IL3Mgw$DKz(*`&7+K8L{(!Ox3|V1 zW9xR@xP2jDs&|O4@uRWign~Pwq9=sxXMuc_GgF3Hr$6nwxh6t#3-KECU zAz>mz`fk|7UcAcba8xz72p84v?dSe_&?dWoq>w&)F~unnx#&@pJC;c` z7ODB^K}V;O|I${z8N(c^CEmUEnecE#GlF*|8U?Hr&X2z_+fY= zs^I0zp;vml6E3G_o!EjNOC#x<>0-nN1<>X>sEv->K4ja8*>*$O)W#^N1>mLPXX)*5uyQB8yEGxwW?xdB3 zlAH2SF9F)2L*7K9&fPZLo`@Y`3B4IZb1CevK=tyT(*^|hri$@pA(2$0kjJU^mL0OkK`r^qRs zfe#JpRdsBpL9e7Mm;l-Wqglc-UqJ)hGT(^y2gtYlUg5UE)f}KbtpEpm!i8jl?C8WH zKnDc?FNw$mGQ@eFy*Qk~p??@+IH_=*z+mU=Hvih1{{N9B{G(4IZ|lLNBPbzlt=~c? zHxT=WhJ6%&4nYjzGJ)D0Zh2EII`;eO4bD+GVy#38ISBDIq@Y#iHn~%f5d#dGL_%Yr z#TUaOmH-eWA`-wZL1D_CJ6CfI0lvY)eL{P9(Xj*vLWxr{Ld zH_ikM!W!T+`I;$g?R^{^mSny%rKVe=GIQDyZqB4Ta65{fpU+dibf3uQ6WGk=O7H_+ zOf_Hu?2$tD2pqPal#A9=Um0QM73?P5`n zFaK!Zg~Xj$u;RfDOT5t~a{%nDK+n53(z}pWIP%4bF8T*K$n_@^2tjkOfRT2XL z5=NWqPY(f#`_B8dFtI=d|H@X8eOwHCv=xYD0*7_-K_P<+8_h_8IWg+h)#+J**_a;| zHb#TZ#`LRJ(4s{20WNor*A9>);6bzoJSE0obG!;zhDPa{MES6KUM-PgUx(q+eV)5A zV$}JS*;NKYl#+Q-rsgTQKcNyO0FUC)n+Z!lX@f2-r`6(iv{e2&^H4|f*c z&>p7G@R;GAS$VHtcEODZ$T7O8pnnKX-2Uf6|K1aIi3D2+dq*?Ep%7j|ZBwzCe_FAj zgHIfD&(+%ui+7YM>3ynMfO?!@I5<9TD>`qZ<{I9BbemxUWb{%8_TkLegwapw4~(9q z(i6e@Am7DD>~nrCTS>`4S~QE<{u;ZSo^~~(ak!>|e)iG(Nn?86p6f~t=EuD~;ky|_ zZw1plE1nmu-`6h};(l=2aAGFzI;-*}yUZKrRWK5ocLD6JclBaRnWh%5DU*j`d#|yC z+d2RfhCmeLFqI1I?no{K7DCZ*r9Li0GyLcB@1>liE1pWW&c}|v;(z^%x({Jm_>tL3 zpT;g{B!G@37HY_c22ndyz*>+qABSe=s*{xpOA-M7s}g`&t-=eqa1a;D5%yM6ZFIjn zFYe9G(hLakHai6bBt#(BZS7QoLdw)svKu$k7KZ z2iiD5_7cyF%!)!w{W-%s#0U0wWK5RTzpnv$;2a07tx#gOB*9mBnO6O;CjE!MW65k3 z3KWJ1ujlbwq#GIex}b1+s^xNgWvm4ZCZD2a*KBJ5(Fu4*LExzj1t`&b&quz~(nR){ zwL7$(eDchQ8fJXT7=0pNF4!$}IW?*`mrJ7tMi*bV)k-cHkmj zyY3CB_r$~MWAB|n)aj78F8Og4V)jFF*gfW_KUUW}HFqbXPKR1>6 zdipNHV|e8u7Lj(#UMiUk$o}LRk(K_ZG7*c@?##Xc1b(L72B+!nz=MDU9UyuuU-o|< zg>MP~x7PY6bE7G$nEoH$*MV(aGtUYeS8R(fed;@?D}MCztn+$8*|+|faR62B-eO0# zcZZ+~vQ1}LcLFeWSHk4>+l3QjiT;oPp#q*xAvrs3!w z2+hz1;*z_9Sx=d(@IGLnYCr(4dd{b9_%9gjq8|w5dVoWp$Ystpj6TG(yg7_on9&IMpWyoCS8w%GEtP7>4x!D;$qz92El$ z?F5+0KoJWhZRw;8zxvEnR5Ve178*ri=Wl}XfAnPop%4N1E3n{)MaZm~bk$tcZA;1M zVT564>IaNlRLUnCQBDN2k`cZTtbMR+p8v}S6o5s~$XAziN00-l9<2bA(uStm&lLbp zMRsu=Dv%kh0zl6IQ6NgZ4CV5bAsAf5byA#Bu0|C%Bnlw^aoMR`)CPjQVOb5DeFtfv z2hUi7fxc_!I%wdT5}#<$0ox;v>KrS1-7@dD9sp3nJpk{NfI*;q8!1}=6ua|rFl6#&Lkj|##O5YsJ^#&?EC<^0%FXsa6Rnk8e);^KyJ0o_( zLz=$Z6FR__fEs(A`|U^Qvk_NI1~KT;_7YQx(%CFy`di8`fQUx@pa@UgYw1ubNO>@A zc+w<-PxA*EJs3=GV3PCFv4pw1chs#lE?%%szezu4wYIc^j-$G2qpb#;;UE}LUrQJ12s>v?%h<+OuAp9YL-xC7iOg~tFqkl4HpB_IED%uDmLi{=`H>$mGPch3fI^SF z!fC7uEqSX@wwvAOD$GICPv$LEd8Y!$y2foL)7AG+EClAe#1s&h&8=%-Gd4~6xzN?; z*vNHId$8Sf6|%$u&K9MK{)kGu@6DyDX=FpRXx$SnQ~?|f?fr&ly;qO@D=Uygll2=HY>P^UIt+C^ ze3osCjQDvM%EutdM$j)8Z?qM(CrI1Jyft>%HIqWT+w~00yHt!5$g>0plh!@vRLZx@ zSC@Vra`$lyMMu~BsA1o%<0GzMtZEmiA=$pvcP}ejqviq|Z4jBc5Gd4p; z0Y{1;HXb8zkw{?Fa~`&Zpz-y(HEO4BO_k$b2kKhDE0H|%Dz3?1-Uk6M;}a}N9-19w z2v|JiA6znoYf#CZev)l_0oKP$VOdLSB+BqH2JQImIcNPj7um;^BBM^v-n|$YcRBq_ z_R9&+QH)lsi!cd5ZOiN;4+GA&oafm2trb$|)v>h3QW~vXrWNA614x^U`?MPATljB^ z+SeU4FFB8gEQC2&p%133!G~zl(mb4gbFS`esO)MjESVb&eDLeuxKRu9l>d8S(FD49y``vBP*Pv? zsJDl8nrfQ+;Sb00uXPR4b8VviwkJOzXWuX28!zGB>|1soMDiKH|E>QafOlBw_{y5= zlC4>(zhEUYbhy*@u2#`(&IiyEqBWi%5JFNx3xI#g%V4?$N&Mf)C`jU$d1PA757a_n zii%jR1nQv1{p&AA=T=re6yL(;1>0#o#bBR52L|dM#Khy_msBG2~ypNj00+8 z5%AdI7TcO-IlLe(Doy!F77EH*z;MwN_RtD^x8F8Ii0V$3UcS2wMcckMpmD*O=z;Vb zy{jjDM9SzolWKCLp9kD1Hf4Wb|@{;@vzhn_aSoH)6G4+-k+k5KSw58*=IEC$dI zQ-&ZLGThbip#o6s1Tu}*b6ZbOBOM4p0SOTm5WGGZAVeTxA)JNCnSdO7i0^o6`|+Kb z#{Yi3*Z*lzP18ID%x8zfJoXqfU6xV2aano=zzY^~sMb^KZEv_kA^D&`ux7sTG@)VF zp)(iDKwCj>U@EOo{1@a0=)k3a6G8qD+Qk4JPlrskQMAyp zcs5Aocdv0VK+R1BX`QXEZGTgcoDd!j4B+~u&Ag*HP^+%;XV#)4LaduiBE=L-CIcmUfSoH1yD!py~VzWVObxO>H%d>{{G;7Pe24U7X8q3o0suUS-4NrJYk z_Y0Pyqj%kvr?2X5A>+KfH%Ha+9JJrZH^p-cJdH9f0#Cl{>A|fb7rY9sZT+%@12ESr zv^`#5qjLOV#fm^t5hnX_0}!gq1)jvp*3O~J_ft@UhDO1_K*k=}(&vIKD&>CX0N-Of zO>2$sRE^0Xj7i0mXBQiQ97*{?ik1-lB&Y1NTtHgo)NGx-o9Jwg-y{K8E?wC9(DH&t zRX)Vw!ooQe-V=Rq{CZloEG8$vO%L;Xj9$R8l`*?{B)9SMK^#EN!i% zh|K@UJbxt~<{!l_Fd9`HI_)t4w3m%R|0W96s~ zn8|3|@bgjSy&m0+<>j)OPxjPayjD!eA_7TnYe9*1TTx@+Bx4KOsCQ=Cv~m4YE{FMF zWl-5qE2lhK{r4^TTwQw`Y<*k<+dFOa^x8!tkC~tb$b$yZ#?7u@C2G%1I3sUjX9js7 z*Z1o;((e?9%-!W- zo;W;5;X_qhTw};?EoddP_mYC?av4Y&ak{6~$(6Xdx89b*#K#W= zrjg9Y@}b9ne3T~ke~QcUV}3A=iwl{2>^ft6}BLo43Os< z@~mJNRL{nZsTV@IXZ|)ofq=#|bEF`e@jWxhu0yI4_49a37vrYrbv5l$A`BV?N?w5L zm7=GrmHU~Mpdtd&ozfs6La7KpE+|X_+*JVaE*mr)pj+PGU{G^bUU3hz0zlv)aH>qb zxg1ELNCQ7Jj(yOUEhA~PRJ1j?V*%>U<6Ok{@owEocnzc}eR-|L2Z$&A zE@#f7cyxQ8UO^~UE}V zEyTj6Si9$0QBzi>)aO&`n)A!!2@!r}MZ>@Xh_|M2P=%gvFIwIeQmO69ZFGxbqpvUI zNqx0>AQ4jylN_k(JsGD(zHpGN|Mp59TlLRtvKtz{Z-&HZ#}2(uMp~^M6pb9g8@AYY zmJ?dzeV3w&s*6fS?N6{7p={I6Qf<$Ics|DqTl;ZQ#lDnNGg;v(|GmSzKEA11$S2)` zXI(uF=_yMjINA7z#XY z?Uzd#M;r+wz8ZgtGu~Tl-5~xf?arP2QMc#OF0VhheXLH1ksK?ux-do^ zJD^aREOYF=LL|PoN4dB`(n7e`N=0DQ_NlMjQz_~k%x|NeMj&fsbm&H3yXfeQW@wJ8 zK(dTGbv-MFi=7!Q|Ix*IC8jon=@=VK%hs{ZD7$>RnDTiS6kmJ0y+$?&Nh-FUp-;uk7;r{uW2NZTMb z|EZ1Za{7r~dA3)HkAZ_v!t|!NL&uPi06VKdF>0L>jMveEz6N~6c(ORxRoqZf<6GO} zUcYbMUX7EQXIx@~Bl6y0QN@pBElt~ZBCk6Na!xh#!OO#7R15w3%U|TNBx;}x7Y6(D zS&XG~U{+4O(K#SR7YX-x^bz+x@HR?)vq;m7!=vz(jCU)d&9K}n+5J0b55cJ%5=wiv@4o!B`~ zQBcmy^;3CZd>xNCm>HV$p`Yd(aFP*5tO>jsS)a`5D1FXMbJeX?w8bSgEe|C~fq%&A z)jjlw4*e~7pvaTua&<$@h|y-zSlU$aJ$BLWX(~eA6rYwBG@$$o*p1iEO|Ca6j>d&~ zX4@SuUO?}2)8^8BHfcZZiP-(;b=02=crGie^zA4#Xn-Q@6>>^j+euB+DgE*cln&UX z-4PL_p&bbJJ1p`pI3>MW?~+62-RG7cvTn;*tk}~Rs)K>2N=hocD4WZ+=f1mjh>7>X z`4c3pGXr`6J1S(z3CDpd{J#sG`O+*hL7{k}?5Dl8(msaNP|NMf2m-7SQ0+`%WHFO0KKDNN{xQ!ypYwUY&wG2l&ii~mpA&7Mf0u!dn~sc(jN$&hJBDOr z6d3T6J$nX>q<=k&1b-B^I(P4ookk|&8^IN=>pe3M@PF^$PwOk<78#j%`u#g?M^y>5eZp&dfJ!Ahq|7uhC4%&p1Rm{u~*V};5q3#GUM_qkIdBLpnR z-VZoI?yJ9PyZXqmx*;UQbD}zPyeEWtc^%&=tOwDm z9MdR83>?V?^$=^Mo7!Rv3%&0**{nnwGIDD5yLF|vCh|y~+1^upjQGd332*2E zO(@j$iLfHOPT=P>DaWjn4334`&_5s6GdgoR()?X#i9!z+wD2N5f8>Ge_0u0J{!X%q z6RKDgX=bmOMfc~|DXjS{RxM6?ys6?)k(6+xA!V92hgkj79)FjX0IGz4k_06j zORXV3kL7g4c7j6z&BvH#wxUvoIzZMRTznT!cXkssI*@O- z;hWn%$IYgK28GJU|5@p@A!m1cqqY6eRH8D)_m4BYcw6`)nL%V-%LCkn8O9+$xvC4k zhWu|MJtfeP(+e+m$I=9u(OT`Q~`(yx9C!=jkHh@Xc4s};z{w5Sx9Q4 z)gL5E*np>F=&i&DSck|zoBmc)12S4i1Y^HFkO41K{2vr*dxL;ySuy49kgE7m=MTnd zz3Okods*h{kDQZ~LDfQKGgIw&p(LP%2IpWG+f@D)l7bBdSrL5n5~PyWVE&Hn^tGVu$J zv3e3rrMwEA-TYt9kt!dXUr`%dd8hNAs*akruO*47oGYbL4<#+<=w))k0BM1UDQifbtJ)`S#cJ`+TQVuThn}Y1*|kKe_{3G za)M#xB=3bbh?af&4=ry3ESUN}?vxfccJl(`?A(stMf|&0-0`jCGO?EO^>-%zDbM#k zl&CFmkt732)?8ETolg{wLpcCz#k5Lqm<+j~O9cEC*GN=*@@K^3qa3Ly znu~$F9el#P^e;fX%v>K%-C!|uE92nCtN?FI+oMiW`tQk(%5vwcU`VRX>t(sciKOgM z`Q$Qw3|N^X`5$_-MA-6mXblNjRC4!^cJ2%Pb4^Wd_(=x*>VKMRs7`5Ck~4IRw(A;+ z_%^ncJN0BTJrUP_OC>s7|CcN^-NCFtWHBjOCg;UuLm6a{(0&m6CgXsrGzUp}8;$XH zIK{V<3W0QZfKYj0FZoXu7L+Tl+xx`wJyfO#W#XS2FP-sE^*Q6{&GdMZ$9^8g-ZMG) zf8|GBYyEwr|B1qXs)70Xf$7UN{tDJ`zlXYJBRWx;Kwi-&jk?0E;~#n#ELGQ=a?=z4 zp|>+@*fGn?@)v;M!U%Dt%d?Yh3qa7l`>wet=pIO!yFcL*zMJNKAbC7r48OV8%++R+ zV1Ml-FDcH|5;_YI)f2iolJK0DXzUBDDh@CSs-( z&?u5ELRYMR76%VeZi{r$s=}~uWsX<^g~0Nnf?d|@SIvPNCVE7KQG%N# zu^XhyL=5AoAfb$2od%{+5&Vv2iV3Sqe!w)r0K)HN+y-0~QC3SGm<%A&k(4#%i>W%5 z(QMnmmhsnB|CdA_qBhB}adV<9QKb`WNLqJ9wvtR10B=m3t}S0t0wLcAP8$#1mYccL zi5&{8wuh%kn==`$)R=^V_)A&X4L?#PAW}#nrwrUbfs~biHNI56@TaAc|E9SnNqO2^ z?qlMdx&1BBH@*CI!u*Ea%BcCDrjIK@a?$L{Xab2lWnokK#z8>5jPTrxUDonluSI3`uSr4L~h{2 zn#0DRdY`8y0$&A{v1nIbY5kUfU<8Ty6r+^E?|ipD>Jh2LCYA5BW@;8A06Kb(0cQze zp*&!#% zht*BaE~zB~WQT7=_vB~IVkV$0m%Q5D?a;Xlnm&|S2b+_YsRU4c160#L6=t=%^)dnZ z);^;Lf3~bIJ;;Ps;kiF7XRg*P#*=h+lNfD2%w^mKx>|C8v5FYK`I#4HLV&Reh%8Vf zE>FPNy15JoAhDY#YMe8- z1{Kw*FOZl|RRQ8C2A;B(1V2^|c#tUWB(m&1J0~@e!ov!b%~p z!iZaZ8o-_5l4AU#S*M&k$%AwZAqilF9$*kDeQPM@9LTA0!a#5JuSq#}lHz}aE{R=sE_tYu3_hVgXk~OOYzla$sfd22db4QL)lFI$788283$;A6e~4WR2d9iP))} z|+gi!1!hc>3L7G$oCPcf&^yTO6p`&Mk&8Btdd;FbpHh|*n0neQzpDUrG z=fE^+7V1`F-j=LgKs9ZruKG>4pIj_rZrgt4=sD0G*hi3X* zhAD_Mw(OE3nsyPSN7rjKtti!64wz{lGE+*i-Lzuu1+(M^RKJ$tC5Drr<30J1e-fDK z2jlPmBj{O_6hMP5Tt2?VO^*^pXA+E=Tw7_rEdqR(a&KI8|1_7u0`S$|aioNFOF%e- z@ruFQRT{@d95#w`B+LH@>O?Z!qPU_7Wui802L?iEAtiJ% zD7|JuMZsW~pPm?S`AX&I2rvpNsX438d(Wp+jsWs>_CJCakd_51`F{k>@CO)gCbd*0 zOz{%%H*}puP+hP=xI4DWoSP?Xh13@dg zzeU@5Y+5~41U9ez$4_j^KHv%sY-9&FT{9s9Kx|@HML?P*ppN4}E#(${oW?VNuAFDw zVHI`{{fT>tP^yK7Ui4Q)f1(CHqC!cVUtXw%0I+QQjj4K+r;{++0zmI9icG9_SqBw# zR{GaYp%$V*+5DN|xdb1}r@SOv44CEnFfYre?@1T-sza7LJW$jNVAyz3Knz6>#A8Ui z->pf42zWR({`#+-5=5FoqKqZ~wNvwa5J2hBzjlf;CUuCEQP57sP@u1sz9DUYe*aT)TEp~2 zQpP$xkPn{rsy)cHP5Bfq4*Ao_iTXglfW1~XoB}7G9F8mEu#2AcaWeCIvfWauTFgiE zmjDK8y%%Ip11dy%=2IxGxQtKg+8;`^+ivO;ye-SjrN0EcFDUbklE1z{*}&+P2TN!l zGkvd?KIcq$Q;dsYdZaC!x1Z+k`9ai5vCR+bb@mOo^ENk6j5C+g={|>kp=f(<@JLU^ z*eYq$-OK_psw46rsIPbLUCBnheOCReuWfV%vfh+_!eL857Uz{kRG-`Ny&ONhd=-i>Sd>>PyYH%j~>)%;OpHrun1|JRtyzs)%Et z$p~NFMT`=4+xk57y++Pej(vITq4>=W%hP2Fvtc?;z5QOt#n#FoG98e8)!7Uupig>aA~Jl}G-Hct2Bw{!w(L3=TR(lz2l zU%A#@WY@224_~=JdIUJc#x3YlM^YL+YKvH4`fyq-V5AXNl=?(!D<^A-92mMD=4Uk? zn1PCWyswtx$Le{Ne}5`;;ZelSVTzV?l#}k37;XHO-m|Nk^=Ea`>HA! zn9yK%GNUq|-MFA86iF$1G1shNNUHVL(1Na~rI>{DJ7S_-%)_{O8MHmCDoz@e<^+mr zC<-9EpFH7lGqfSFJ)4J!pRmwyBF%AM%K`Ja__AKAYU!=P(cmcifmhDWR3~38CZBlj zO(@ASgn6a)4al3f(W<2MI;86c+{so(BcWVB>RXbPq8lZXp8MX28!*Pr(wG}luD)1tRk?Q2fNuGN?x4YaDd_SE4SX{>X^=dWc{U8`SSrm=vl z%`{|9DC*tSWPWSnsG)isL zg_%pZhQbq^8uO9+<#!#^m^%0gzHDvGfYoUu+Y@N~`F@`LR{`S!TwfpGFM+8da#V}% zaJGp-Yy%=Xp5?9efA7wq{QY_^<6fwetaX3+xjC|Z^G+uL?5J>taE+cal4xJK;#lH6 z{DWdYU)+T0*pPSE{2=6%GUSnk95FY;`~}~_uPn+cPoBHm)@Pd9+4(}u?iy%dIYOmFuwhKa9v5N zw4Y-l#!#s}2QC`2I0~Hz?LSVp5dQN~I}M-kP@+|2nTCD)tTIydR%#!N+~4DIQE%Zy zOurMWH7@uovHEQNNX)yiF?FbiuBmtRuFm_8Yzn-APD8HWzWUR&?gDc5VN-jTcT0>5 zZhJ~^?VvHDf5pixJ2xt#M60cw*vel1P7lPV=ra|o^7=--Ki<(R^{5e!5?*Otu9er# zXM9T0WJ0c&PZjjDcNbSOu3AUus6oa}EgQM0E3_qw+<3Yw6aRDvx1zFd*e{o`H`x-j;cXyS_eM9RaY-Q6H7Oe?|g z+b?nng9`*{$b)BtTHLMoPMH7JUR`dx!oD3HQGT=Bek^QfA2zkz&!ZkohE+_m@O^V@ z^>4^Hgr}oemkmFXXa082cu5L#%|lrRdVdM>qtESoFV?d2l-4?I>q2A9TK0)S7X0Fd ztr8}}mmUIvqD=(!YR!^U7pK9`JRZ_hd-FH%L zy0NAyu->*s!Q-&>%Mn4_iJ(6o&o+nTn!O12e^Zgm?wZ~q4Z#lye_!1Tw$K-|enIU@ zE@*RHlxoYB+W7+^#>aSE6N_|dv$PhMAO8IJT!S8s^`!ZT{~nI*Qv(*4#4J9?X*s*uY+c$ zrM8h~9GibS*6HSUkXjd`@$>wKLG1Rq$mjEN3AP*zagr67pS(1;DsB;qSK2<|=}!KV z$1=11C0-y9IFIij7?9^>2&Rq0^8QvAQ%>(+Xgn-3dh+;Nqx1G^5O1ECS7M0&30vJ` z=I@)knt$>YzM~F#ILN3g1wV%`=30!s3vsQ9@p{G19%vl0*x3>yS{l(&ROs)I&bWYx^DgpqKr7cK?>^O>(#T@Q^+5$%JPX!7Y_L3zkPi7*Lu0g(PwId*oL*$ zYV$bF6C24MMqFD;CX{a&I>uF#l*FU$@WU*J!5gZbcLFyRRLQsffj5q$Pe8R>jJd1f=6^fq?((bh&-Sl-_>g0bZ!4}T2TSvhqxad~F@=3m zpB*A|4d?a<`B@n0cWs378Sxlr{358Eg4?NKPou)?Gxb3H8{E{LJ_z(mdOiBfGD5HE$>5mR>I~p;ce)acb!N$SiDo#_jye&$91OdM)HIY+~po z)r{d(W;+Wc!mq5C@;9wPtVV0PO_i~?xJ6`RXxi;&^JJR$Z=a@uoVnSXLGK7KW&T!y5mz$4mYYNR3bUQQoW z5hjd#6}P^}Xs7#^a71nuKku_GP8z_8TOA6{6b@vFDOfySyk4Ok`D@<)t_z!=@zE;e za4T40)CqgxzAG$MNfl53Z7}`T;ni!=>+Cbvi15L)>$y4#*;36u4VBgR17YOB90jj# zD!#UpMRz#;{*86bGOT#^giN3{SRa*dAhJ#8>b|eQ)Ax&~L>}?h^ugnEc2S>(!@hrQ zY~26?k6fNDzY%SfeWCTX94g0OJ%wVZI)2fQ3K+>oza40va?rt!tie(hui}`+XWeU; z$DMC_$TGhB6+DsUVf!S<+(}kq$H3K6Y~3&w`hss}!Ik%OMRHb=*7ch~y{QO-DgTbR z&(R_TNn4B;y-k!<`QF+3SDnd3s-h3EAvP~fAbi%HLzX8EJ98yX;3(EO`It2PvU-2- ziCi6xwD_`HFK(Dbp&Ee*^kDCK`)G+RC&>3woGnDm(@2oD&MU2#{=s7p+uD^sI`*%*=I)gu@27W(Hbu;INDAQd zk>Z07*#17h8B|uxG)p>Ecagaw@YbL!ldk#e;T%?K3IgnRg(wDSNo53D6fAA-&hFUH|I^?Fn#os zkHK30@DSWby#DoLRhlMpaK`p<(72UqKw8%JO}5|YvI%y`5%wespzxDc->Umjcxnp+ zz3ttb;*T@2&xj?_Lfhg#kz$!9RajRTbWrfGDE%Vy1PWP*K~zWe7(bYjP6=&Lj2%}} z#GuA6tFTA>qGGyJ|9UJvFLuPh_F0XPthafu$TSW;cw^?km8x;)x7U~D!@L{0isxGG zbDxdGO6iMQ?L`_%7gcx!-6dpUNK-`d2u zZ&gX`3Rmzd@%5Qv2)C{G|7nxut-H6Xt#(UOgk+ zp@xe{oeq-Sp=}6xVWy{mNpY>L^)S>jlzDVK{(|LCSJxB~5|T;OKFH^@sT-kLvSF}B z92#aGHWr&*2GZNCy}#{B@;oqyRTl-hd|9MKFYrG#)~3vI*c-XU`lDo&yFHekHUVX} z0fc{}T(2$_NR|_ei-opt?CpcxD=y+pCbC=P{|ab^THzN;3b}M`tQ{AsGZr#;%&C|n z$OF@2n)(JGKY9!jc0<<9ym!0Buk1~w0naXr^BUrPo}OdJ6|gozFquRVVOxa&LEqEE zbbaXEPqRm^NqePmKVV=mYv%k(W>=H`0PRX2T9+xr)4Z3i$*-((r&abOy}T)bz^wF! zGMz`?1B|yl7cD}1`zMsKvXl_zUU0p2^;I85Alds6*g(t;y#8%;7BmED&_YgYiZYuR ziS{S|I-+2S(c=EvC)GDp(+3{ zg@^)g{U1{9M>qUcBKvD`T&zKR)N$Qz&zY=lfCwran+BpkH4GUo4BtS7BR*0~zGGpG zSL=H=Ovd;zT+FVVy{dHQm08N~BJY9s-|^>ikNStO4*L%{yKZ_us!l~%6&7SPnQo90 z&jS)KX}bRV43jiutrqFJ&Jqz3$<;ktEAg^Te36boq%UwqIIdS`w1@AQhpJ6HlGx!% z43D|>`Y3f~M)DT)OK2~$yWy2J%Jn&C&zX$n zLyD_^Kt)EKTRyn@6>+S8?#7$Ut-^>O8mYIGg$7Hzm0LzM8PL2feLJrCGqi#vb+T>6o*p0I4w-czh_=1+-&v8s#EK;JeGbR|z53~zV zRB?9iuX!!^nrZt&mO>8=F0x%h8*r~UiJ#yhRr_B7>FX7B&!mU;y)m3oMaIdLv>(w+TNe!m%}!V$bjryNnG_#;#1;j{R(Ac8||Mt|Ghvf#CO=FCeoTc`r(dH%Z>g z@3Z4k{w2g8;mC+YlAhi#92^yT4+X7p9*E#8ArI?_U)J)R7U~H3N23kjJ0NPwk{Un8 zQubPm16u@=ZaLiX1H~}Ap5RXl=SnTYu~%?qlb8F9WnBynYe9aeYclvW{oUZ*xa^Gf zhc!es2-{gE=Es|Zp*Dyhi#!h}#zdA$(y~+PRl$tZ`}Vg6Z8}OXiH^7V`>6e26=lgU z4yt?DZGZTCLvMOCt+X8yz=91BBiug}lP44XQ+79k;fqnZk3z)ya)%Vp#e{eW+Mq;X z%_>z%89&$X@n%RyzLu>wW=<}0Y9KXUAzfIOq1=#8Qhmob=V{dQ);%B=e08Decqrw(z;;LW+ zoJ{$QuO7{oVlQQ8ambEaQIGX;$^(rcQ>O`Td7qzF)a}lDwIk6JsgqKcsb(4N@V!Ia zr@{5=CCLKHt;_EQRLCq_Pxn7h?;BwL@~8yYjoQ!tLcS#2Jda)s+gC}>uvgdh#^hD= z`*^HrAEBTlVG>SUWVI`ov?=I^uz@_YflTdXzf~+c+*9`jdf5mJ+`W~;LUqJO_dad6 zV}oWAwOSOE*MmkA^7`j z|Bf)R@}_`5J*CM)yE4Z0Sz6zDn$gnRw$cGV?ykznl0`M8PP{o%6dF|~$Sr@kI4-t` zdWNxaVcn6-$k%{)V_bz=eT~S-$F6%?gRg-l(!bzqb98nZh2Xmbl3D8O>cd=`yHYSR zR<9gx56v}=U5~sA{jrrM*jueX`4UqhaAA&QT#MaW6Qk!Sqey|WM8t<8jz{)x**Nhk zs6x~^9@8pZ>{symZcjD=zQ#QJ=hINPqHdwPqxzrkoj+au1)r3`@3WzBLKf%rtXtcz zA`tP`sJ7BkNc3!AO7Mrkj|?mqpqx4uaPTUw>QQX(n%wdmX+Nui`@S#vf|qTPcl!_t zSH&>p55`g(70Tg$bGXHOmYXS9agJB_RW_P37NQeBx!Zo4kQP--CbE4R=yA#FN_p4* z-Up+Y)K{QU%p&4Qp)2`H70>pX9LLS6-@Oy3;}4y|dkQMDBMbuVZRj1ZS+We(jW* zCG0z*I^G069PMXdcvob4v2gZl3&eS{e$d`OniZgLGh3*x9Q6E7JKV44q>8kYoa9AGoBiG0Cmjw!6t!T zAUFL3!H~adjiBOpODDW_z{ri=c6wwfH~#v2v?eV5J_0XE*!u&0LH(4SnN>|SIC z^_KMdl_h!V!%~;|VRqq^2opUpagt%}-TH9cp^sxO?Sy3hkw?|v?G3EfP<;StYUAu3 zb4nT6cV$KmRfvnvrset0rx}NVF{k?L2;;jE-j?f48OG^gV40r*;$`fc!~wt~;toSx zx>yH&vDEqy?{3{&LfS@!Udj&yO`vch^?v%nw~U3CJ{ZCcbE^+9b@HcN=ntvcvArc= z8}_MG7d$j6RWB$3Mhs;VoqPJ`z0wh_9=J7N>5T)1@F}TdP}*a-t0O}z4}VUNJv&Th3Ru{AFSdeze06oDgs++v;(>)u~(#M@)|+qm9fQxt#y9k0d5Fd;t)+nG>>7QD6u<354?T_H|9x5OeM%6}UE=s{Be1zC zwi8%wY(H6#9uL%qUdwX03CjsnB{bphS{P%&2hy!R7r9u)d(U0v8)?ZN{FI%1axo+u zGOWT=^uf??vsQ?5mm4!wtWtD0g2_|7H4paI>?62$C6Rh`Ex6Bu5BkExHyZPIs7o54 z>I!gw{B(@>#dFVWGVVw;KGy#sJjoq~>Z&8keM_Jv``h){*O06~yo^G>)E;bS1zAU8 z;J3=n!c<);tIj-aG0w!FQDfdpn?O7p(UFOb0uqyTXubY{u&}gT8>K`mM_R~q<3zgh z^%#FAIP&!LrPn51vvPOX`T3{|dF+DljJhrOFyTU{l7!qtKgNtQkO|uow zvz2u6+5`!mvwoSd%@##qbop74}?m44yXA7aGt%R_vDW65Ue%Ge@sC6CB){ zV$&`NoTSxBy?`e0Jr4fivLo$wOZ?N1E~6xWvS zJnEj17?jpg-h_#5dJhS>uv)+Tv*3$%gNX?Q+L+`+w&hExO&ad3#<*f&1%e@4QB8*Z zgrWftrFhI(xYe>2)SL88&R{l^kNYR{=u-BYx_nUgLwt@5231dqC|;boO~qc3F8+}w z`MUiDdrS4`JOjPhpQXFLF-UNJ5kt5If2xD^t#cz?4~q(Bl(N1q@KYVU zNtg>c(KjzS=nkc;rV~4GItVENr+k7QR}F9XkMrst6{XrC9r_Sd&xZGSN{Q8yE3ZB_ z-NLm-zRXs5tief!Ul3~ytQ^@MG@*)7%ryKXP$Xlen2-P<`VBrq?PcRo-_MdY1GRa> z=%4|M@i&9}&5k4TA@hygn!?vS%6H5KHW6nox+}!DdMG7mxoEOJvylmbioMDt(&6o2 z3sp+JUsm_Hd+Bal%1UR-U*VBi^W)@-<|%U>{v|9$nP4Wm(S;I2tS9>hfw-FwGkcZ9?B)J_w0jYY0chEEDf>#io!c( z3HDboLth`5BelT`3Eq1bb7YRwP`PUyyY7Yy7ro%;x*ca~%(V|35xnffMm~cgQK;Xt z7Ow9$jWdjxR*R;Wd~_t1ym%Xi5_EkGdP~j!7L0j0GG|D2_N#(JVPH!7A=^K5np4l4 z@FmTDR*|*|IgB*JcLG*y<9BY2;!B#Uh;#?RlyDQ?zE$pMs4=xm4~%q@&<-9wk3%=p z?|yuH<8PBLw}%u5b-w|=v?OqRhWmHHGvY9_4$NW+;BWJ_sCO+a4U{zFEXlz~b1HxYnaO z-b6ap2J&u8drI&{ma{4=mBCFIz)3MP80n3dr6B|!^B|CR}@JA*sDJ3r^DI+GW@JLcYNlscxN&Z4~vD3IOP)W3sPw|@CQ`wljv diff --git a/config/plugins/visualizations/charts/static/repository/visualizations/biojs/phylocanvas/wrapper.js b/config/plugins/visualizations/charts/static/repository/visualizations/biojs/phylocanvas/wrapper.js index 6942e852d42..067bc172292 100644 --- a/config/plugins/visualizations/charts/static/repository/visualizations/biojs/phylocanvas/wrapper.js +++ b/config/plugins/visualizations/charts/static/repository/visualizations/biojs/phylocanvas/wrapper.js @@ -9,15 +9,45 @@ define( [ 'utilities/utils', 'plugins/biojs/phylocanvas/phylocanvas' ], function url : dataset.download_url, success : function( content ) { try { - var tree = Phylocanvas.default.createTree( options.targets[ 0 ] ); + var tree = Phylocanvas.default.createTree( options.targets[ 0 ] ), + node_size = 20, + text_size = 20, + line_width = 2; // Set different properties of the tree tree.setTreeType( settings.get( 'tree_type' ) ); tree.branchColour = settings.get( 'edge_color' ); - tree.showLabels = settings.get( 'show_label' ) === "true" ? true : false; + tree.showLabels = settings.get( 'show_labels' ) === "true" ? true : false; + tree.alignLabels = settings.get( 'align_labels' ) === "true" ? true : false; + tree.highlightColour = settings.get( 'highlighted_color' ); + tree.selectedColour = settings.get( 'selected_color' ); + tree.setNodeSize( node_size ); + tree.setTextSize( text_size ); + tree.lineWidth = line_width; + + // Register click event on tree + tree.on('click', function (e) { + var node = tree.getNodeAtMousePosition( e ); + // Here collapse action is taking preference. + // Whenver collapse and prune both are selected true, + // collapse action will be performed + // Collapse the selected branch + if( settings.get( 'collapse_branch' ) === "true" ) { + tree.branches[ node.id ].collapsed = true; + tree.draw(); + }// Prune the selected branch + else if( settings.get( 'prune_branch' ) === "true" ) { + tree.branches[ node.id ].pruned = true; + tree.draw(); + } + }); // Draw the phylogenetic tree tree.load( content ); chart.state( 'ok', 'Done.' ); options.process.resolve(); + // Adjust the size of tree on window resize + $( window ).resize( function() { + tree.fitInPanel( tree.leaves ); tree.draw(); + } ); } catch( err ) { chart.state( 'failed', err ); }