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

funnel-graph-js

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

funnel-graph-js - npm Package Compare versions

Comparing version 1.3.6 to 1.3.7

4

CHANGELOG.md

@@ -0,1 +1,5 @@

### 1.3.7 (Apr 12, 2019)
* Add option to display sub-label raw value
### 1.3.6 (Mar 6, 2019)

@@ -2,0 +6,0 @@

10

dist/js/funnel-graph.js

@@ -176,2 +176,3 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.FunnelGraph = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){

this.width = options.width;
this.subLabelValue = options.subLabelValue || 'percent';
}

@@ -343,3 +344,3 @@ /**

segmentPercentages.setAttribute('class', 'label__segment-percentages');
var percenageList = '<ul class="segment-percentage__list">';
var percentageList = '<ul class="segment-percentage__list">';

@@ -349,7 +350,8 @@ var twoDimPercentages = _this.getPercentages2d();

_this.subLabels.forEach(function (subLabel, j) {
percenageList += "<li>".concat(_this.subLabels[j], ":\n <span class=\"percentage__list-label\">").concat(twoDimPercentages[index][j], "%</span>\n </li>");
var subLabelDisplayValue = _this.subLabelValue === 'percent' ? "".concat(twoDimPercentages[index][j], "%") : (0, _number.formatNumber)(_this.values[index][j]);
percentageList += "<li>".concat(_this.subLabels[j], ":\n <span class=\"percentage__list-label\">").concat(subLabelDisplayValue, "</span>\n </li>");
});
percenageList += '</ul>';
segmentPercentages.innerHTML = percenageList;
percentageList += '</ul>';
segmentPercentages.innerHTML = percentageList;
labelElement.appendChild(segmentPercentages);

@@ -356,0 +358,0 @@ }

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

!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).FunnelGraph=t()}}(function(){return function a(o,s,c){function u(e,t){if(!s[e]){if(!o[e]){var n="function"==typeof require&&require;if(!t&&n)return n(e,!0);if(l)return l(e,!0);var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}var r=s[e]={exports:{}};o[e][0].call(r.exports,function(t){return u(o[e][1][t]||t)},r,r.exports,a,o,s,c)}return s[e].exports}for(var l="function"==typeof require&&require,t=0;t<c.length;t++)u(c[t]);return u}({1:[function(t,e,n){"use strict";e.exports=t("./src/js/main").default},{"./src/js/main":3}],2:[function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(n,"__esModule",{value:!0}),n.defaultColors=n.removeAttrs=n.setAttrs=n.createSVGElement=n.areEqual=n.getDefaultColors=n.generateLegendBackground=void 0;var a=function(e,n){"object"===r(n)&&Object.keys(n).forEach(function(t){e.setAttribute(t,n[t])})};n.setAttrs=a;n.removeAttrs=function(e){for(var t=arguments.length,n=new Array(1<t?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];n.forEach(function(t){e.removeAttribute(t)})};n.createSVGElement=function(t,e,n){var i=document.createElementNS("http://www.w3.org/2000/svg",t);return"object"===r(n)&&a(i,n),void 0!==e&&e.appendChild(i),i};n.generateLegendBackground=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"horizontal";return"string"==typeof t?"background-color: ".concat(t):1===t.length?"background-color: ".concat(t[0]):"background-image: linear-gradient(".concat("horizontal"===e?"to right, ":"").concat(t.join(", "),")")};var o=["#FF4589","#FF5050","#05DF9D","#4FF2FD","#2D9CDB","#A0BBFF","#FFD76F","#F2C94C","#FF9A9A","#FFB178"];n.defaultColors=o;n.getDefaultColors=function(t){for(var e=[].concat(o),n=[],i=0;i<t;i++){var r=Math.abs(Math.round(Math.random()*(e.length-1)));n.push(e[r]),e.splice(r,1)}return n};n.areEqual=function(t,e){var n=Object.prototype.toString.call(t);if(n!==Object.prototype.toString.call(e))return!1;if("[object Array]"!==n)return!1;if(t.length!==e.length)return!1;for(var i=0;i<t.length;i++){var r=Object.prototype.toString.call(t[i]);if(r!==Object.prototype.toString.call(e[i]))return!1;if("[object Array]"===r){if(t[i].length!==e[i].length)return!1;for(var a=0;a<t[i].length;a++)if(t[i][a]!==e[i][a])return!1}else if(t[i]!==e[i])return!1}return!0}},{}],3:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var f=t("./number"),h=t("./path"),u=t("./graph");function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function g(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function a(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var i=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.containerSelector=t.container,this.gradientDirection=t.gradientDirection&&"vertical"===t.gradientDirection?"vertical":"horizontal",this.direction=t.direction&&"vertical"===t.direction?"vertical":"horizontal",this.labels=e.getLabels(t),this.subLabels=e.getSubLabels(t),this.values=e.getValues(t),this.percentages=this.createPercentages(),this.colors=t.data.colors||(0,u.getDefaultColors)(this.is2d()?this.getSubDataSize():2),this.displayPercent=t.displayPercent||!1,this.data=t.data,this.height=t.height,this.width=t.width}var t,n,i;return t=e,i=[{key:"getSubLabels",value:function(t){if(!t.data)throw new Error("Data is missing");var e=t.data;return void 0===e.subLabels?[]:e.subLabels}},{key:"getLabels",value:function(t){if(!t.data)throw new Error("Data is missing");var e=t.data;return void 0===e.labels?[]:e.labels}},{key:"getValues",value:function(t){if(!t.data)return[];var e=t.data;return"object"===r(e)?e.values:[]}}],(n=[{key:"getMainAxisPoints",value:function(){for(var t=this.getDataSize(),e=[],n=this.isVertical()?this.getHeight():this.getWidth(),i=0;i<=t;i++)e.push((0,f.roundPoint)(n*i/t));return e}},{key:"getCrossAxisPoints",value:function(){var t=[],e=this.getFullDimension(),n=e/2;if(this.is2d()){var i=this.getValues2d(),r=Math.max.apply(Math,g(i));i.push(g(i).pop()),t.push(i.map(function(t){return(0,f.roundPoint)((r-t)/r*n)}));for(var a=this.getPercentages2d(),o=t[0],s=1;s<this.getSubDataSize();s++){for(var c=t[s-1],u=[],l=0;l<this.getDataSize();l++)u.push((0,f.roundPoint)(c[l]+(e-2*o[l])*(a[l][s-1]/100)));u.push([].concat(u).pop()),t.push(u)}t.push(o.map(function(t){return e-t}))}else{var h=Math.max.apply(Math,g(this.values)),d=g(this.values).concat(g(this.values).pop());t.push(d.map(function(t){return(0,f.roundPoint)((h-t)/h*n)})),t.push(t[0].map(function(t){return e-t}))}return t}},{key:"getGraphType",value:function(){return this.values&&this.values[0]instanceof Array?"2d":"normal"}},{key:"is2d",value:function(){return"2d"===this.getGraphType()}},{key:"isVertical",value:function(){return"vertical"===this.direction}},{key:"getDataSize",value:function(){return this.values.length}},{key:"getSubDataSize",value:function(){return this.values[0].length}},{key:"getFullDimension",value:function(){return this.isVertical()?this.getWidth():this.getHeight()}},{key:"addLabels",value:function(){var l=this,h=document.createElement("div");h.setAttribute("class","svg-funnel-js__labels"),this.percentages.forEach(function(t,n){var e=document.createElement("div");e.setAttribute("class","svg-funnel-js__label label-".concat(n+1));var i=document.createElement("div");i.setAttribute("class","label__title"),i.textContent=l.labels[n]||"";var r=document.createElement("div");r.setAttribute("class","label__value");var a=l.is2d()?l.getValues2d()[n]:l.values[n];r.textContent=(0,f.formatNumber)(a);var o=document.createElement("div");if(o.setAttribute("class","label__percentage"),100!==t&&(o.textContent="".concat(t.toString(),"%")),e.appendChild(r),e.appendChild(i),l.displayPercent&&e.appendChild(o),l.is2d()){var s=document.createElement("div");s.setAttribute("class","label__segment-percentages");var c='<ul class="segment-percentage__list">',u=l.getPercentages2d();l.subLabels.forEach(function(t,e){c+="<li>".concat(l.subLabels[e],':\n <span class="percentage__list-label">').concat(u[n][e],"%</span>\n </li>")}),c+="</ul>",s.innerHTML=c,e.appendChild(s)}h.appendChild(e)}),this.container.appendChild(h)}},{key:"addSubLabels",value:function(){var n=this;if(this.subLabels){var t=document.createElement("div");t.setAttribute("class","svg-funnel-js__subLabels");var i="";this.subLabels.forEach(function(t,e){i+='<div class="svg-funnel-js__subLabel svg-funnel-js__subLabel-'.concat(e+1,'">\n <div class="svg-funnel-js__subLabel--color" \n style="').concat((0,u.generateLegendBackground)(n.colors[e],n.gradientDirection),'"></div>\n <div class="svg-funnel-js__subLabel--title">').concat(t,"</div>\n</div>")}),t.innerHTML=i,this.container.appendChild(t)}}},{key:"createContainer",value:function(){if(!this.containerSelector)throw new Error("Container is missing");this.container=document.querySelector(this.containerSelector),this.container.classList.add("svg-funnel-js"),this.graphContainer=document.createElement("div"),this.graphContainer.classList.add("svg-funnel-js__container"),this.container.appendChild(this.graphContainer),"vertical"===this.direction&&this.container.classList.add("svg-funnel-js--vertical")}},{key:"setValues",value:function(t){return this.values=t,this}},{key:"setDirection",value:function(t){return this.direction=t,this}},{key:"setHeight",value:function(t){return this.height=t,this}},{key:"setWidth",value:function(t){return this.width=t,this}},{key:"getValues2d",value:function(){var e=[];return this.values.forEach(function(t){e.push(t.reduce(function(t,e){return t+e},0))}),e}},{key:"getPercentages2d",value:function(){var n=[];return this.values.forEach(function(t){var e=t.reduce(function(t,e){return t+e},0);n.push(t.map(function(t){return(0,f.roundPoint)(100*t/e)}))}),n}},{key:"createPercentages",value:function(){var t=[];t=this.is2d()?this.getValues2d():g(this.values);var e=Math.max.apply(Math,g(t));return t.map(function(t){return(0,f.roundPoint)(100*t/e)})}},{key:"applyGradient",value:function(t,e,n,i){var r=null===t.querySelector("defs")?(0,u.createSVGElement)("defs",t):t.querySelector("defs"),a="funnelGradient-".concat(i),o=(0,u.createSVGElement)("linearGradient",r,{id:a});"vertical"===this.gradientDirection&&(0,u.setAttrs)(o,{x1:"0",x2:"0",y1:"0",y2:"1"});for(var s=n.length,c=0;c<s;c++)(0,u.createSVGElement)("stop",o,{"stop-color":n[c],offset:"".concat(Math.round(100*c/(s-1)),"%")});(0,u.setAttrs)(e,{fill:'url("#'.concat(a,'")'),stroke:'url("#'.concat(a,'")')})}},{key:"makeSVG",value:function(){for(var t=(0,u.createSVGElement)("svg",this.graphContainer,{width:this.getWidth(),height:this.getHeight()}),e=this.getCrossAxisPoints().length-1,n=0;n<e;n++){var i=(0,u.createSVGElement)("path",t),r=this.is2d()?this.colors[n]:this.colors,a="string"==typeof r||1===r.length?"solid":"gradient";"solid"===a?(0,u.setAttrs)(i,{fill:r,stroke:r}):"gradient"===a&&this.applyGradient(t,i,r,n+1),t.appendChild(i)}this.graphContainer.appendChild(t)}},{key:"getSVG",value:function(){var t=this.container.querySelector("svg");if(!t)throw new Error("No SVG found inside of the container");return t}},{key:"getWidth",value:function(){return this.width||this.graphContainer.clientWidth}},{key:"getHeight",value:function(){return this.height||this.graphContainer.clientHeight}},{key:"getPathDefinitions",value:function(){for(var t=this.getCrossAxisPoints().length-1,e=[],n=0;n<t;n++)if(this.isVertical()){var i=this.getCrossAxisPoints()[n],r=this.getCrossAxisPoints()[n+1],a=this.getMainAxisPoints(),o=(0,h.createVerticalPath)(n,i,r,a);e.push(o)}else{var s=this.getMainAxisPoints(),c=this.getCrossAxisPoints()[n],u=this.getCrossAxisPoints()[n+1],l=(0,h.createPath)(n,s,c,u);e.push(l)}return e}},{key:"getPathMedian",value:function(t){if(this.isVertical()){var e=this.getCrossAxisPoints()[t],i=this.getCrossAxisPoints()[t+1],n=this.getMainAxisPoints(),r=[],a=[];return e.forEach(function(t,e){var n=(t+i[e])/2;r.push(n-1),a.push(n+1)}),(0,h.createVerticalPath)(t,r,a,n)}var o=this.getMainAxisPoints(),s=this.getCrossAxisPoints()[t],c=this.getCrossAxisPoints()[t+1],u=[],l=[];return s.forEach(function(t,e){var n=(t+c[e])/2;u.push(n-1),l.push(n+1)}),(0,h.createPath)(t,o,u,l)}},{key:"drawPaths",value:function(){var n=this.getSVG().querySelectorAll("path");this.getPathDefinitions().forEach(function(t,e){n[e].setAttribute("d",t)})}},{key:"draw",value:function(){this.createContainer(),this.makeSVG(),this.addLabels(),this.is2d()&&this.addSubLabels(),this.drawPaths()}},{key:"makeVertical",value:function(){if("vertical"===this.direction)return!0;this.direction="vertical",this.container.classList.add("svg-funnel-js--vertical");var t=this.getSVG(),e=this.getHeight(),n=this.getWidth();return(0,u.setAttrs)(t,{height:e,width:n}),this.drawPaths(),!0}},{key:"makeHorizontal",value:function(){if("horizontal"===this.direction)return!0;this.direction="horizontal",this.container.classList.remove("svg-funnel-js--vertical");var t=this.getSVG(),e=this.getHeight(),n=this.getWidth();return(0,u.setAttrs)(t,{height:e,width:n}),this.drawPaths(),!0}},{key:"toggleDirection",value:function(){"horizontal"===this.direction?this.makeVertical():this.makeHorizontal()}},{key:"gradientMakeVertical",value:function(){return"vertical"===this.gradientDirection||(this.gradientDirection="vertical",this.graphContainer.querySelectorAll("linearGradient").forEach(function(t){(0,u.setAttrs)(t,{x1:"0",x2:"0",y1:"0",y2:"1"})})),!0}},{key:"gradientMakeHorizontal",value:function(){return"horizontal"===this.gradientDirection||(this.gradientDirection="horizontal",this.graphContainer.querySelectorAll("linearGradient").forEach(function(t){(0,u.removeAttrs)(t,"x1","x2","y1","y2")})),!0}},{key:"gradientToggleDirection",value:function(){"horizontal"===this.gradientDirection?this.gradientMakeVertical():this.gradientMakeHorizontal()}},{key:"updateWidth",value:function(t){this.width=t;var e=this.getSVG(),n=this.getWidth();return(0,u.setAttrs)(e,{width:n}),this.drawPaths(),!0}},{key:"updateHeight",value:function(t){this.height=t;var e=this.getSVG(),n=this.getHeight();return(0,u.setAttrs)(e,{height:n}),this.drawPaths(),!0}},{key:"updateData",value:function(t){void 0!==t.labels&&(this.container.querySelector(".svg-funnel-js__labels").remove(),this.labels=e.getLabels({data:t}),this.addLabels()),void 0!==t.colors&&(this.colors=t.colors||(0,u.getDefaultColors)(this.is2d()?this.getSubDataSize():2)),void 0!==t.values&&(Object.prototype.toString.call(t.values[0])!==Object.prototype.toString.call(this.values[0])?(this.container.querySelector("svg").remove(),this.values=e.getValues({data:t}),this.makeSVG()):this.values=e.getValues({data:t}),this.drawPaths()),void 0!==t.subLabels&&(this.container.querySelector(".svg-funnel-js__subLabels").remove(),this.subLabels=e.getSubLabels({data:t}),this.addSubLabels())}},{key:"update",value:function(t){var r=this;void 0!==t.displayPercent&&this.displayPercent!==t.displayPercent&&(!0===this.displayPercent?this.container.querySelectorAll(".label__percentage").forEach(function(t){t.remove()}):this.container.querySelectorAll(".svg-funnel-js__label").forEach(function(t,e){var n=r.percentages[e],i=document.createElement("div");i.setAttribute("class","label__percentage"),100!==n&&(i.textContent="".concat(n.toString(),"%"),t.appendChild(i))})),void 0!==t.height&&this.updateHeight(t.height),void 0!==t.width&&this.updateWidth(t.width),void 0!==t.gradientDirection&&("vertical"===t.gradientDirection?this.gradientMakeVertical():"horizontal"===t.gradientDirection&&this.gradientMakeHorizontal()),void 0!==t.direction&&("vertical"===t.direction?this.makeVertical():"horizontal"===t.direction&&this.makeHorizontal()),void 0!==t.data&&this.updateData(t.data)}}])&&a(t.prototype,n),i&&a(t,i),e}();n.default=i},{"./graph":2,"./number":4,"./path":5}],4:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.formatNumber=n.roundPoint=void 0;n.roundPoint=function(t){return Math.round(10*t)/10};n.formatNumber=function(t){return Number(t).toFixed().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,")}},{}],5:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.createVerticalPath=n.createPath=n.createVerticalCurves=n.createCurves=void 0;var r=t("./number");function s(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var c=function(t,e,n,i){return" C".concat((0,r.roundPoint)((n+t)/2),",").concat(e," ")+"".concat((0,r.roundPoint)((n+t)/2),",").concat(i," ").concat(n,",").concat(i)};n.createCurves=c;var u=function(t,e,n,i){return" C".concat(t,",").concat((0,r.roundPoint)((i+e)/2)," ")+"".concat(n,",").concat((0,r.roundPoint)((i+e)/2)," ").concat(n,",").concat(i)};n.createVerticalCurves=u;n.createPath=function(t,e,n,i){for(var r="M".concat(e[0],",").concat(n[0]),a=0;a<e.length-1;a++)r+=c(e[a],n[a],e[a+1],n[a+1]);r+=" L".concat(s(e).pop(),",").concat(s(i).pop());for(var o=e.length-1;0<o;o--)r+=c(e[o],i[o],e[o-1],i[o-1]);return r+=" Z"};n.createVerticalPath=function(t,e,n,i){for(var r="M".concat(e[0],",").concat(i[0]),a=0;a<e.length-1;a++)r+=u(e[a],i[a],e[a+1],i[a+1]);r+=" L".concat(s(n).pop(),",").concat(s(i).pop());for(var o=e.length-1;0<o;o--)r+=u(n[o],i[o],n[o-1],i[o-1]);return r+=" Z"}},{"./number":4}]},{},[1])(1)});
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).FunnelGraph=t()}}(function(){return function a(o,s,c){function u(e,t){if(!s[e]){if(!o[e]){var n="function"==typeof require&&require;if(!t&&n)return n(e,!0);if(l)return l(e,!0);var i=new Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}var r=s[e]={exports:{}};o[e][0].call(r.exports,function(t){return u(o[e][1][t]||t)},r,r.exports,a,o,s,c)}return s[e].exports}for(var l="function"==typeof require&&require,t=0;t<c.length;t++)u(c[t]);return u}({1:[function(t,e,n){"use strict";e.exports=t("./src/js/main").default},{"./src/js/main":3}],2:[function(t,e,n){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(n,"__esModule",{value:!0}),n.defaultColors=n.removeAttrs=n.setAttrs=n.createSVGElement=n.areEqual=n.getDefaultColors=n.generateLegendBackground=void 0;var a=function(e,n){"object"===r(n)&&Object.keys(n).forEach(function(t){e.setAttribute(t,n[t])})};n.setAttrs=a;n.removeAttrs=function(e){for(var t=arguments.length,n=new Array(1<t?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];n.forEach(function(t){e.removeAttribute(t)})};n.createSVGElement=function(t,e,n){var i=document.createElementNS("http://www.w3.org/2000/svg",t);return"object"===r(n)&&a(i,n),void 0!==e&&e.appendChild(i),i};n.generateLegendBackground=function(t){var e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:"horizontal";return"string"==typeof t?"background-color: ".concat(t):1===t.length?"background-color: ".concat(t[0]):"background-image: linear-gradient(".concat("horizontal"===e?"to right, ":"").concat(t.join(", "),")")};var o=["#FF4589","#FF5050","#05DF9D","#4FF2FD","#2D9CDB","#A0BBFF","#FFD76F","#F2C94C","#FF9A9A","#FFB178"];n.defaultColors=o;n.getDefaultColors=function(t){for(var e=[].concat(o),n=[],i=0;i<t;i++){var r=Math.abs(Math.round(Math.random()*(e.length-1)));n.push(e[r]),e.splice(r,1)}return n};n.areEqual=function(t,e){var n=Object.prototype.toString.call(t);if(n!==Object.prototype.toString.call(e))return!1;if("[object Array]"!==n)return!1;if(t.length!==e.length)return!1;for(var i=0;i<t.length;i++){var r=Object.prototype.toString.call(t[i]);if(r!==Object.prototype.toString.call(e[i]))return!1;if("[object Array]"===r){if(t[i].length!==e[i].length)return!1;for(var a=0;a<t[i].length;a++)if(t[i][a]!==e[i][a])return!1}else if(t[i]!==e[i])return!1}return!0}},{}],3:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var f=t("./number"),h=t("./path"),u=t("./graph");function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function g(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function a(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}var i=function(){function e(t){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),this.containerSelector=t.container,this.gradientDirection=t.gradientDirection&&"vertical"===t.gradientDirection?"vertical":"horizontal",this.direction=t.direction&&"vertical"===t.direction?"vertical":"horizontal",this.labels=e.getLabels(t),this.subLabels=e.getSubLabels(t),this.values=e.getValues(t),this.percentages=this.createPercentages(),this.colors=t.data.colors||(0,u.getDefaultColors)(this.is2d()?this.getSubDataSize():2),this.displayPercent=t.displayPercent||!1,this.data=t.data,this.height=t.height,this.width=t.width,this.subLabelValue=t.subLabelValue||"percent"}var t,n,i;return t=e,i=[{key:"getSubLabels",value:function(t){if(!t.data)throw new Error("Data is missing");var e=t.data;return void 0===e.subLabels?[]:e.subLabels}},{key:"getLabels",value:function(t){if(!t.data)throw new Error("Data is missing");var e=t.data;return void 0===e.labels?[]:e.labels}},{key:"getValues",value:function(t){if(!t.data)return[];var e=t.data;return"object"===r(e)?e.values:[]}}],(n=[{key:"getMainAxisPoints",value:function(){for(var t=this.getDataSize(),e=[],n=this.isVertical()?this.getHeight():this.getWidth(),i=0;i<=t;i++)e.push((0,f.roundPoint)(n*i/t));return e}},{key:"getCrossAxisPoints",value:function(){var t=[],e=this.getFullDimension(),n=e/2;if(this.is2d()){var i=this.getValues2d(),r=Math.max.apply(Math,g(i));i.push(g(i).pop()),t.push(i.map(function(t){return(0,f.roundPoint)((r-t)/r*n)}));for(var a=this.getPercentages2d(),o=t[0],s=1;s<this.getSubDataSize();s++){for(var c=t[s-1],u=[],l=0;l<this.getDataSize();l++)u.push((0,f.roundPoint)(c[l]+(e-2*o[l])*(a[l][s-1]/100)));u.push([].concat(u).pop()),t.push(u)}t.push(o.map(function(t){return e-t}))}else{var h=Math.max.apply(Math,g(this.values)),d=g(this.values).concat(g(this.values).pop());t.push(d.map(function(t){return(0,f.roundPoint)((h-t)/h*n)})),t.push(t[0].map(function(t){return e-t}))}return t}},{key:"getGraphType",value:function(){return this.values&&this.values[0]instanceof Array?"2d":"normal"}},{key:"is2d",value:function(){return"2d"===this.getGraphType()}},{key:"isVertical",value:function(){return"vertical"===this.direction}},{key:"getDataSize",value:function(){return this.values.length}},{key:"getSubDataSize",value:function(){return this.values[0].length}},{key:"getFullDimension",value:function(){return this.isVertical()?this.getWidth():this.getHeight()}},{key:"addLabels",value:function(){var l=this,h=document.createElement("div");h.setAttribute("class","svg-funnel-js__labels"),this.percentages.forEach(function(t,i){var e=document.createElement("div");e.setAttribute("class","svg-funnel-js__label label-".concat(i+1));var n=document.createElement("div");n.setAttribute("class","label__title"),n.textContent=l.labels[i]||"";var r=document.createElement("div");r.setAttribute("class","label__value");var a=l.is2d()?l.getValues2d()[i]:l.values[i];r.textContent=(0,f.formatNumber)(a);var o=document.createElement("div");if(o.setAttribute("class","label__percentage"),100!==t&&(o.textContent="".concat(t.toString(),"%")),e.appendChild(r),e.appendChild(n),l.displayPercent&&e.appendChild(o),l.is2d()){var s=document.createElement("div");s.setAttribute("class","label__segment-percentages");var c='<ul class="segment-percentage__list">',u=l.getPercentages2d();l.subLabels.forEach(function(t,e){var n="percent"===l.subLabelValue?"".concat(u[i][e],"%"):(0,f.formatNumber)(l.values[i][e]);c+="<li>".concat(l.subLabels[e],':\n <span class="percentage__list-label">').concat(n,"</span>\n </li>")}),c+="</ul>",s.innerHTML=c,e.appendChild(s)}h.appendChild(e)}),this.container.appendChild(h)}},{key:"addSubLabels",value:function(){var n=this;if(this.subLabels){var t=document.createElement("div");t.setAttribute("class","svg-funnel-js__subLabels");var i="";this.subLabels.forEach(function(t,e){i+='<div class="svg-funnel-js__subLabel svg-funnel-js__subLabel-'.concat(e+1,'">\n <div class="svg-funnel-js__subLabel--color" \n style="').concat((0,u.generateLegendBackground)(n.colors[e],n.gradientDirection),'"></div>\n <div class="svg-funnel-js__subLabel--title">').concat(t,"</div>\n</div>")}),t.innerHTML=i,this.container.appendChild(t)}}},{key:"createContainer",value:function(){if(!this.containerSelector)throw new Error("Container is missing");this.container=document.querySelector(this.containerSelector),this.container.classList.add("svg-funnel-js"),this.graphContainer=document.createElement("div"),this.graphContainer.classList.add("svg-funnel-js__container"),this.container.appendChild(this.graphContainer),"vertical"===this.direction&&this.container.classList.add("svg-funnel-js--vertical")}},{key:"setValues",value:function(t){return this.values=t,this}},{key:"setDirection",value:function(t){return this.direction=t,this}},{key:"setHeight",value:function(t){return this.height=t,this}},{key:"setWidth",value:function(t){return this.width=t,this}},{key:"getValues2d",value:function(){var e=[];return this.values.forEach(function(t){e.push(t.reduce(function(t,e){return t+e},0))}),e}},{key:"getPercentages2d",value:function(){var n=[];return this.values.forEach(function(t){var e=t.reduce(function(t,e){return t+e},0);n.push(t.map(function(t){return(0,f.roundPoint)(100*t/e)}))}),n}},{key:"createPercentages",value:function(){var t=[];t=this.is2d()?this.getValues2d():g(this.values);var e=Math.max.apply(Math,g(t));return t.map(function(t){return(0,f.roundPoint)(100*t/e)})}},{key:"applyGradient",value:function(t,e,n,i){var r=null===t.querySelector("defs")?(0,u.createSVGElement)("defs",t):t.querySelector("defs"),a="funnelGradient-".concat(i),o=(0,u.createSVGElement)("linearGradient",r,{id:a});"vertical"===this.gradientDirection&&(0,u.setAttrs)(o,{x1:"0",x2:"0",y1:"0",y2:"1"});for(var s=n.length,c=0;c<s;c++)(0,u.createSVGElement)("stop",o,{"stop-color":n[c],offset:"".concat(Math.round(100*c/(s-1)),"%")});(0,u.setAttrs)(e,{fill:'url("#'.concat(a,'")'),stroke:'url("#'.concat(a,'")')})}},{key:"makeSVG",value:function(){for(var t=(0,u.createSVGElement)("svg",this.graphContainer,{width:this.getWidth(),height:this.getHeight()}),e=this.getCrossAxisPoints().length-1,n=0;n<e;n++){var i=(0,u.createSVGElement)("path",t),r=this.is2d()?this.colors[n]:this.colors,a="string"==typeof r||1===r.length?"solid":"gradient";"solid"===a?(0,u.setAttrs)(i,{fill:r,stroke:r}):"gradient"===a&&this.applyGradient(t,i,r,n+1),t.appendChild(i)}this.graphContainer.appendChild(t)}},{key:"getSVG",value:function(){var t=this.container.querySelector("svg");if(!t)throw new Error("No SVG found inside of the container");return t}},{key:"getWidth",value:function(){return this.width||this.graphContainer.clientWidth}},{key:"getHeight",value:function(){return this.height||this.graphContainer.clientHeight}},{key:"getPathDefinitions",value:function(){for(var t=this.getCrossAxisPoints().length-1,e=[],n=0;n<t;n++)if(this.isVertical()){var i=this.getCrossAxisPoints()[n],r=this.getCrossAxisPoints()[n+1],a=this.getMainAxisPoints(),o=(0,h.createVerticalPath)(n,i,r,a);e.push(o)}else{var s=this.getMainAxisPoints(),c=this.getCrossAxisPoints()[n],u=this.getCrossAxisPoints()[n+1],l=(0,h.createPath)(n,s,c,u);e.push(l)}return e}},{key:"getPathMedian",value:function(t){if(this.isVertical()){var e=this.getCrossAxisPoints()[t],i=this.getCrossAxisPoints()[t+1],n=this.getMainAxisPoints(),r=[],a=[];return e.forEach(function(t,e){var n=(t+i[e])/2;r.push(n-1),a.push(n+1)}),(0,h.createVerticalPath)(t,r,a,n)}var o=this.getMainAxisPoints(),s=this.getCrossAxisPoints()[t],c=this.getCrossAxisPoints()[t+1],u=[],l=[];return s.forEach(function(t,e){var n=(t+c[e])/2;u.push(n-1),l.push(n+1)}),(0,h.createPath)(t,o,u,l)}},{key:"drawPaths",value:function(){var n=this.getSVG().querySelectorAll("path");this.getPathDefinitions().forEach(function(t,e){n[e].setAttribute("d",t)})}},{key:"draw",value:function(){this.createContainer(),this.makeSVG(),this.addLabels(),this.is2d()&&this.addSubLabels(),this.drawPaths()}},{key:"makeVertical",value:function(){if("vertical"===this.direction)return!0;this.direction="vertical",this.container.classList.add("svg-funnel-js--vertical");var t=this.getSVG(),e=this.getHeight(),n=this.getWidth();return(0,u.setAttrs)(t,{height:e,width:n}),this.drawPaths(),!0}},{key:"makeHorizontal",value:function(){if("horizontal"===this.direction)return!0;this.direction="horizontal",this.container.classList.remove("svg-funnel-js--vertical");var t=this.getSVG(),e=this.getHeight(),n=this.getWidth();return(0,u.setAttrs)(t,{height:e,width:n}),this.drawPaths(),!0}},{key:"toggleDirection",value:function(){"horizontal"===this.direction?this.makeVertical():this.makeHorizontal()}},{key:"gradientMakeVertical",value:function(){return"vertical"===this.gradientDirection||(this.gradientDirection="vertical",this.graphContainer.querySelectorAll("linearGradient").forEach(function(t){(0,u.setAttrs)(t,{x1:"0",x2:"0",y1:"0",y2:"1"})})),!0}},{key:"gradientMakeHorizontal",value:function(){return"horizontal"===this.gradientDirection||(this.gradientDirection="horizontal",this.graphContainer.querySelectorAll("linearGradient").forEach(function(t){(0,u.removeAttrs)(t,"x1","x2","y1","y2")})),!0}},{key:"gradientToggleDirection",value:function(){"horizontal"===this.gradientDirection?this.gradientMakeVertical():this.gradientMakeHorizontal()}},{key:"updateWidth",value:function(t){this.width=t;var e=this.getSVG(),n=this.getWidth();return(0,u.setAttrs)(e,{width:n}),this.drawPaths(),!0}},{key:"updateHeight",value:function(t){this.height=t;var e=this.getSVG(),n=this.getHeight();return(0,u.setAttrs)(e,{height:n}),this.drawPaths(),!0}},{key:"updateData",value:function(t){void 0!==t.labels&&(this.container.querySelector(".svg-funnel-js__labels").remove(),this.labels=e.getLabels({data:t}),this.addLabels()),void 0!==t.colors&&(this.colors=t.colors||(0,u.getDefaultColors)(this.is2d()?this.getSubDataSize():2)),void 0!==t.values&&(Object.prototype.toString.call(t.values[0])!==Object.prototype.toString.call(this.values[0])?(this.container.querySelector("svg").remove(),this.values=e.getValues({data:t}),this.makeSVG()):this.values=e.getValues({data:t}),this.drawPaths()),void 0!==t.subLabels&&(this.container.querySelector(".svg-funnel-js__subLabels").remove(),this.subLabels=e.getSubLabels({data:t}),this.addSubLabels())}},{key:"update",value:function(t){var r=this;void 0!==t.displayPercent&&this.displayPercent!==t.displayPercent&&(!0===this.displayPercent?this.container.querySelectorAll(".label__percentage").forEach(function(t){t.remove()}):this.container.querySelectorAll(".svg-funnel-js__label").forEach(function(t,e){var n=r.percentages[e],i=document.createElement("div");i.setAttribute("class","label__percentage"),100!==n&&(i.textContent="".concat(n.toString(),"%"),t.appendChild(i))})),void 0!==t.height&&this.updateHeight(t.height),void 0!==t.width&&this.updateWidth(t.width),void 0!==t.gradientDirection&&("vertical"===t.gradientDirection?this.gradientMakeVertical():"horizontal"===t.gradientDirection&&this.gradientMakeHorizontal()),void 0!==t.direction&&("vertical"===t.direction?this.makeVertical():"horizontal"===t.direction&&this.makeHorizontal()),void 0!==t.data&&this.updateData(t.data)}}])&&a(t.prototype,n),i&&a(t,i),e}();n.default=i},{"./graph":2,"./number":4,"./path":5}],4:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.formatNumber=n.roundPoint=void 0;n.roundPoint=function(t){return Math.round(10*t)/10};n.formatNumber=function(t){return Number(t).toFixed().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,")}},{}],5:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.createVerticalPath=n.createPath=n.createVerticalCurves=n.createCurves=void 0;var r=t("./number");function s(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var c=function(t,e,n,i){return" C".concat((0,r.roundPoint)((n+t)/2),",").concat(e," ")+"".concat((0,r.roundPoint)((n+t)/2),",").concat(i," ").concat(n,",").concat(i)};n.createCurves=c;var u=function(t,e,n,i){return" C".concat(t,",").concat((0,r.roundPoint)((i+e)/2)," ")+"".concat(n,",").concat((0,r.roundPoint)((i+e)/2)," ").concat(n,",").concat(i)};n.createVerticalCurves=u;n.createPath=function(t,e,n,i){for(var r="M".concat(e[0],",").concat(n[0]),a=0;a<e.length-1;a++)r+=c(e[a],n[a],e[a+1],n[a+1]);r+=" L".concat(s(e).pop(),",").concat(s(i).pop());for(var o=e.length-1;0<o;o--)r+=c(e[o],i[o],e[o-1],i[o-1]);return r+=" Z"};n.createVerticalPath=function(t,e,n,i){for(var r="M".concat(e[0],",").concat(i[0]),a=0;a<e.length-1;a++)r+=u(e[a],i[a],e[a+1],i[a+1]);r+=" L".concat(s(n).pop(),",").concat(s(i).pop());for(var o=e.length-1;0<o;o--)r+=u(n[o],i[o],n[o-1],i[o-1]);return r+=" Z"}},{"./number":4}]},{},[1])(1)});
{
"name": "funnel-graph-js",
"version": "1.3.6",
"version": "1.3.7",
"description": "SVG Funnel Graph Javascript Library",

@@ -5,0 +5,0 @@ "main": "main.js",

@@ -17,2 +17,4 @@ # FunnelGraph.js

FunnelGraph.js is also available as a Vue.js component: [Vue Funnel Graph](https://github.com/greghub/vue-funnel-graph-js)
## Table of Contents

@@ -223,2 +225,3 @@

| `height` | Height of the funnel graph | `number` | No | | Container height | 300 |
| `subLabelValue` | Whether display percentage or real value of segment | `string` | No | `percent`, `raw` | `percent` |

@@ -225,0 +228,0 @@ ## Methods

@@ -24,2 +24,3 @@ /* eslint-disable no-trailing-spaces */

this.width = options.width;
this.subLabelValue = options.subLabelValue || 'percent';
}

@@ -200,3 +201,3 @@

segmentPercentages.setAttribute('class', 'label__segment-percentages');
let percenageList = '<ul class="segment-percentage__list">';
let percentageList = '<ul class="segment-percentage__list">';

@@ -206,8 +207,11 @@ const twoDimPercentages = this.getPercentages2d();

this.subLabels.forEach((subLabel, j) => {
percenageList += `<li>${this.subLabels[j]}:
<span class="percentage__list-label">${twoDimPercentages[index][j]}%</span>
const subLabelDisplayValue = this.subLabelValue === 'percent'
? `${twoDimPercentages[index][j]}%`
: formatNumber(this.values[index][j]);
percentageList += `<li>${this.subLabels[j]}:
<span class="percentage__list-label">${subLabelDisplayValue}</span>
</li>`;
});
percenageList += '</ul>';
segmentPercentages.innerHTML = percenageList;
percentageList += '</ul>';
segmentPercentages.innerHTML = percentageList;
labelElement.appendChild(segmentPercentages);

@@ -214,0 +218,0 @@ }

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc