funnel-graph-js
Advanced tools
Comparing version 1.3.3 to 1.3.4
@@ -0,1 +1,5 @@ | ||
### 1.3.4 (Feb 27, 2019) | ||
* Update theme | ||
### 1.3.3 (Feb 22, 2019) | ||
@@ -2,0 +6,0 @@ |
@@ -12,3 +12,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){ | ||
}); | ||
exports.removeAttrs = exports.setAttrs = exports.createSVGElement = exports.areEqual = exports.getDefaultColors = exports.generateLegendBackground = void 0; | ||
exports.defaultColors = exports.removeAttrs = exports.setAttrs = exports.createSVGElement = exports.areEqual = exports.getDefaultColors = exports.generateLegendBackground = void 0; | ||
@@ -71,2 +71,3 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } | ||
var defaultColors = ['#FF4589', '#FF5050', '#05DF9D', '#4FF2FD', '#2D9CDB', '#A0BBFF', '#FFD76F', '#F2C94C', '#FF9A9A', '#FFB178']; | ||
exports.defaultColors = defaultColors; | ||
@@ -314,3 +315,2 @@ var getDefaultColors = function getDefaultColors(number) { | ||
this.container.style.position = 'relative'; | ||
var holder = document.createElement('div'); | ||
@@ -396,2 +396,26 @@ holder.setAttribute('class', 'svg-funnel-js__labels'); | ||
}, { | ||
key: "setValues", | ||
value: function setValues(v) { | ||
this.values = v; | ||
return this; | ||
} | ||
}, { | ||
key: "setDirection", | ||
value: function setDirection(d) { | ||
this.direction = d; | ||
return this; | ||
} | ||
}, { | ||
key: "setHeight", | ||
value: function setHeight(h) { | ||
this.height = h; | ||
return this; | ||
} | ||
}, { | ||
key: "setWidth", | ||
value: function setWidth(w) { | ||
this.width = w; | ||
return this; | ||
} | ||
}, { | ||
key: "getValues2d", | ||
@@ -519,8 +543,8 @@ value: function getValues2d() { | ||
}, { | ||
key: "drawPaths", | ||
value: function drawPaths() { | ||
var svg = this.getSVG(); | ||
var paths = svg.querySelectorAll('path'); | ||
key: "getPathDefinitions", | ||
value: function getPathDefinitions() { | ||
var valuesNum = this.getCrossAxisPoints().length - 1; | ||
var paths = []; | ||
for (var i = 0; i < paths.length; i++) { | ||
for (var i = 0; i < valuesNum; i++) { | ||
if (this.isVertical()) { | ||
@@ -531,3 +555,3 @@ var X = this.getCrossAxisPoints()[i]; | ||
var d = (0, _path.createVerticalPath)(i, X, XNext, Y); | ||
paths[i].setAttribute('d', d); | ||
paths.push(d); | ||
} else { | ||
@@ -541,7 +565,19 @@ var _X = this.getMainAxisPoints(); | ||
paths[i].setAttribute('d', _d); | ||
paths.push(_d); | ||
} | ||
} | ||
return paths; | ||
} | ||
}, { | ||
key: "drawPaths", | ||
value: function drawPaths() { | ||
var svg = this.getSVG(); | ||
var paths = svg.querySelectorAll('path'); | ||
var definitions = this.getPathDefinitions(); | ||
definitions.forEach(function (definition, index) { | ||
paths[index].setAttribute('d', definition); | ||
}); | ||
} | ||
}, { | ||
key: "draw", | ||
@@ -789,14 +825,4 @@ value: function draw() { | ||
if (data instanceof Array) { | ||
if (Number.isInteger(data[0])) { | ||
return data; | ||
} | ||
return data.map(function (item) { | ||
return item.value; | ||
}); | ||
} | ||
if (_typeof(data) === 'object') { | ||
return options.data.values; | ||
return data.values; | ||
} | ||
@@ -803,0 +829,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 l(e,t){if(!s[e]){if(!o[e]){var n="function"==typeof require&&require;if(!t&&n)return n(e,!0);if(u)return u(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var i=s[e]={exports:{}};o[e][0].call(i.exports,function(t){return l(o[e][1][t]||t)},i,i.exports,a,o,s,c)}return s[e].exports}for(var u="function"==typeof require&&require,t=0;t<c.length;t++)l(c[t]);return l}({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 i(t){return(i="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.removeAttrs=n.setAttrs=n.createSVGElement=n.areEqual=n.getDefaultColors=n.generateLegendBackground=void 0;var a=function(e,n){"object"===i(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),r=1;r<t;r++)n[r-1]=arguments[r];n.forEach(function(t){e.removeAttribute(t)})};n.createSVGElement=function(t,e,n){var r=document.createElementNS("http://www.w3.org/2000/svg",t);return"object"===i(n)&&a(r,n),void 0!==e&&e.appendChild(r),r};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.getDefaultColors=function(t){for(var e=[].concat(o),n=[],r=0;r<t;r++){var i=Math.abs(Math.round(Math.random()*(e.length-1)));n.push(e[i]),e.splice(i,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 r=0;r<t.length;r++){var i=Object.prototype.toString.call(t[r]);if(i!==Object.prototype.toString.call(e[r]))return!1;if("[object Array]"===i){if(t[r].length!==e[r].length)return!1;for(var a=0;a<t[r].length;a++)if(t[r][a]!==e[r][a])return!1}else if(t[r]!==e[r])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"),u=t("./path"),l=t("./graph");function i(t){return(i="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 r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var r=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,l.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,r;return t=e,r=[{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 e instanceof Array?Number.isInteger(e[0])?e:e.map(function(t){return t.value}):"object"===i(e)?t.data.values:[]}}],(n=[{key:"getMainAxisPoints",value:function(){for(var t=this.getDataSize(),e=[],n=this.isVertical()?this.getHeight():this.getWidth(),r=0;r<=t;r++)e.push((0,f.roundPoint)(n*r/t));return e}},{key:"getCrossAxisPoints",value:function(){var t=[],e=this.getFullDimension(),n=e/2;if(this.is2d()){var r=this.getValues2d(),i=Math.max.apply(Math,g(r));r.push(g(r).pop()),t.push(r.map(function(t){return(0,f.roundPoint)((i-t)/i*n)}));for(var a=this.getPercentages2d(),o=t[0],s=1;s<this.getSubDataSize();s++){for(var c=t[s-1],l=[],u=0;u<this.getDataSize();u++)l.push((0,f.roundPoint)(c[u]+(e-2*o[u])*(a[u][s-1]/100)));l.push([].concat(l).pop()),t.push(l)}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 u=this;this.container.style.position="relative";var 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 r=document.createElement("div");r.setAttribute("class","label__title"),r.textContent=u.labels[n]||"";var i=document.createElement("div");i.setAttribute("class","label__value");var a=u.is2d()?u.getValues2d()[n]:u.values[n];i.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(i),e.appendChild(r),u.displayPercent&&e.appendChild(o),u.is2d()){var s=document.createElement("div");s.setAttribute("class","label__segment-percentages");var c='<ul class="segment-percentage__list">',l=u.getPercentages2d();u.subLabels.forEach(function(t,e){c+="<li>".concat(u.subLabels[e],':\n <span class="percentage__list-label">').concat(l[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 r="";this.subLabels.forEach(function(t,e){r+='<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,l.generateLegendBackground)(n.colors[e],n.gradientDirection),'"></div>\n <div class="svg-funnel-js__subLabel--title">').concat(t,"</div>\n</div>")}),t.innerHTML=r,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:"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,r){var i=null===t.querySelector("defs")?(0,l.createSVGElement)("defs",t):t.querySelector("defs"),a="funnelGradient-".concat(r),o=(0,l.createSVGElement)("linearGradient",i,{id:a});"vertical"===this.gradientDirection&&(0,l.setAttrs)(o,{x1:"0",x2:"0",y1:"0",y2:"1"});for(var s=n.length,c=0;c<s;c++)(0,l.createSVGElement)("stop",o,{"stop-color":n[c],offset:"".concat(Math.round(100*c/(s-1)),"%")});(0,l.setAttrs)(e,{fill:'url("#'.concat(a,'")'),stroke:'url("#'.concat(a,'")')})}},{key:"makeSVG",value:function(){for(var t=(0,l.createSVGElement)("svg",this.graphContainer,{width:this.getWidth(),height:this.getHeight()}),e=this.getCrossAxisPoints().length-1,n=0;n<e;n++){var r=(0,l.createSVGElement)("path",t),i=this.is2d()?this.colors[n]:this.colors,a="string"==typeof i||1===i.length?"solid":"gradient";"solid"===a?(0,l.setAttrs)(r,{fill:i,stroke:i}):"gradient"===a&&this.applyGradient(t,r,i,n+1),t.appendChild(r)}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:"drawPaths",value:function(){for(var t=this.getSVG().querySelectorAll("path"),e=0;e<t.length;e++)if(this.isVertical()){var n=this.getCrossAxisPoints()[e],r=this.getCrossAxisPoints()[e+1],i=this.getMainAxisPoints(),a=(0,u.createVerticalPath)(e,n,r,i);t[e].setAttribute("d",a)}else{var o=this.getMainAxisPoints(),s=this.getCrossAxisPoints()[e],c=this.getCrossAxisPoints()[e+1],l=(0,u.createPath)(e,o,s,c);t[e].setAttribute("d",l)}}},{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,l.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,l.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,l.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,l.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,l.setAttrs)(e,{width:n}),this.drawPaths(),!0}},{key:"updateHeight",value:function(t){this.height=t;var e=this.getSVG(),n=this.getHeight();return(0,l.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,l.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 i=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=i.percentages[e],r=document.createElement("div");r.setAttribute("class","label__percentage"),100!==n&&(r.textContent="".concat(n.toString(),"%"),t.appendChild(r))})),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),r&&a(t,r),e}();n.default=r},{"./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 i=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,r){return" C".concat((0,i.roundPoint)((n+t)/2),",").concat(e," ")+"".concat((0,i.roundPoint)((n+t)/2),",").concat(r," ").concat(n,",").concat(r)};n.createCurves=c;var l=function(t,e,n,r){return" C".concat(t,",").concat((0,i.roundPoint)((r+e)/2)," ")+"".concat(n,",").concat((0,i.roundPoint)((r+e)/2)," ").concat(n,",").concat(r)};n.createVerticalCurves=l;n.createPath=function(t,e,n,r){for(var i="M".concat(e[0],",").concat(n[0]),a=0;a<e.length-1;a++)i+=c(e[a],n[a],e[a+1],n[a+1]);i+=" L".concat(s(e).pop(),",").concat(s(r).pop());for(var o=e.length-1;0<o;o--)i+=c(e[o],r[o],e[o-1],r[o-1]);return i+=" Z"};n.createVerticalPath=function(t,e,n,r){for(var i="M".concat(e[0],",").concat(r[0]),a=0;a<e.length-1;a++)i+=l(e[a],r[a],e[a+1],r[a+1]);i+=" L".concat(s(n).pop(),",").concat(s(r).pop());for(var o=e.length-1;0<o;o--)i+=l(n[o],r[o],n[o-1],r[o-1]);return i+=" 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 l(e,t){if(!s[e]){if(!o[e]){var n="function"==typeof require&&require;if(!t&&n)return n(e,!0);if(u)return u(e,!0);var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}var i=s[e]={exports:{}};o[e][0].call(i.exports,function(t){return l(o[e][1][t]||t)},i,i.exports,a,o,s,c)}return s[e].exports}for(var u="function"==typeof require&&require,t=0;t<c.length;t++)l(c[t]);return l}({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 i(t){return(i="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"===i(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),r=1;r<t;r++)n[r-1]=arguments[r];n.forEach(function(t){e.removeAttribute(t)})};n.createSVGElement=function(t,e,n){var r=document.createElementNS("http://www.w3.org/2000/svg",t);return"object"===i(n)&&a(r,n),void 0!==e&&e.appendChild(r),r};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=[],r=0;r<t;r++){var i=Math.abs(Math.round(Math.random()*(e.length-1)));n.push(e[i]),e.splice(i,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 r=0;r<t.length;r++){var i=Object.prototype.toString.call(t[r]);if(i!==Object.prototype.toString.call(e[r]))return!1;if("[object Array]"===i){if(t[r].length!==e[r].length)return!1;for(var a=0;a<t[r].length;a++)if(t[r][a]!==e[r][a])return!1}else if(t[r]!==e[r])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"),l=t("./graph");function i(t){return(i="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 r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}var r=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,l.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,r;return t=e,r=[{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"===i(e)?e.values:[]}}],(n=[{key:"getMainAxisPoints",value:function(){for(var t=this.getDataSize(),e=[],n=this.isVertical()?this.getHeight():this.getWidth(),r=0;r<=t;r++)e.push((0,f.roundPoint)(n*r/t));return e}},{key:"getCrossAxisPoints",value:function(){var t=[],e=this.getFullDimension(),n=e/2;if(this.is2d()){var r=this.getValues2d(),i=Math.max.apply(Math,g(r));r.push(g(r).pop()),t.push(r.map(function(t){return(0,f.roundPoint)((i-t)/i*n)}));for(var a=this.getPercentages2d(),o=t[0],s=1;s<this.getSubDataSize();s++){for(var c=t[s-1],l=[],u=0;u<this.getDataSize();u++)l.push((0,f.roundPoint)(c[u]+(e-2*o[u])*(a[u][s-1]/100)));l.push([].concat(l).pop()),t.push(l)}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 u=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 r=document.createElement("div");r.setAttribute("class","label__title"),r.textContent=u.labels[n]||"";var i=document.createElement("div");i.setAttribute("class","label__value");var a=u.is2d()?u.getValues2d()[n]:u.values[n];i.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(i),e.appendChild(r),u.displayPercent&&e.appendChild(o),u.is2d()){var s=document.createElement("div");s.setAttribute("class","label__segment-percentages");var c='<ul class="segment-percentage__list">',l=u.getPercentages2d();u.subLabels.forEach(function(t,e){c+="<li>".concat(u.subLabels[e],':\n <span class="percentage__list-label">').concat(l[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 r="";this.subLabels.forEach(function(t,e){r+='<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,l.generateLegendBackground)(n.colors[e],n.gradientDirection),'"></div>\n <div class="svg-funnel-js__subLabel--title">').concat(t,"</div>\n</div>")}),t.innerHTML=r,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,r){var i=null===t.querySelector("defs")?(0,l.createSVGElement)("defs",t):t.querySelector("defs"),a="funnelGradient-".concat(r),o=(0,l.createSVGElement)("linearGradient",i,{id:a});"vertical"===this.gradientDirection&&(0,l.setAttrs)(o,{x1:"0",x2:"0",y1:"0",y2:"1"});for(var s=n.length,c=0;c<s;c++)(0,l.createSVGElement)("stop",o,{"stop-color":n[c],offset:"".concat(Math.round(100*c/(s-1)),"%")});(0,l.setAttrs)(e,{fill:'url("#'.concat(a,'")'),stroke:'url("#'.concat(a,'")')})}},{key:"makeSVG",value:function(){for(var t=(0,l.createSVGElement)("svg",this.graphContainer,{width:this.getWidth(),height:this.getHeight()}),e=this.getCrossAxisPoints().length-1,n=0;n<e;n++){var r=(0,l.createSVGElement)("path",t),i=this.is2d()?this.colors[n]:this.colors,a="string"==typeof i||1===i.length?"solid":"gradient";"solid"===a?(0,l.setAttrs)(r,{fill:i,stroke:i}):"gradient"===a&&this.applyGradient(t,r,i,n+1),t.appendChild(r)}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 r=this.getCrossAxisPoints()[n],i=this.getCrossAxisPoints()[n+1],a=this.getMainAxisPoints(),o=(0,h.createVerticalPath)(n,r,i,a);e.push(o)}else{var s=this.getMainAxisPoints(),c=this.getCrossAxisPoints()[n],l=this.getCrossAxisPoints()[n+1],u=(0,h.createPath)(n,s,c,l);e.push(u)}return e}},{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,l.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,l.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,l.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,l.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,l.setAttrs)(e,{width:n}),this.drawPaths(),!0}},{key:"updateHeight",value:function(t){this.height=t;var e=this.getSVG(),n=this.getHeight();return(0,l.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,l.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 i=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=i.percentages[e],r=document.createElement("div");r.setAttribute("class","label__percentage"),100!==n&&(r.textContent="".concat(n.toString(),"%"),t.appendChild(r))})),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),r&&a(t,r),e}();n.default=r},{"./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 i=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,r){return" C".concat((0,i.roundPoint)((n+t)/2),",").concat(e," ")+"".concat((0,i.roundPoint)((n+t)/2),",").concat(r," ").concat(n,",").concat(r)};n.createCurves=c;var l=function(t,e,n,r){return" C".concat(t,",").concat((0,i.roundPoint)((r+e)/2)," ")+"".concat(n,",").concat((0,i.roundPoint)((r+e)/2)," ").concat(n,",").concat(r)};n.createVerticalCurves=l;n.createPath=function(t,e,n,r){for(var i="M".concat(e[0],",").concat(n[0]),a=0;a<e.length-1;a++)i+=c(e[a],n[a],e[a+1],n[a+1]);i+=" L".concat(s(e).pop(),",").concat(s(r).pop());for(var o=e.length-1;0<o;o--)i+=c(e[o],r[o],e[o-1],r[o-1]);return i+=" Z"};n.createVerticalPath=function(t,e,n,r){for(var i="M".concat(e[0],",").concat(r[0]),a=0;a<e.length-1;a++)i+=l(e[a],r[a],e[a+1],r[a+1]);i+=" L".concat(s(n).pop(),",").concat(s(r).pop());for(var o=e.length-1;0<o;o--)i+=l(n[o],r[o],n[o-1],r[o-1]);return i+=" Z"}},{"./number":4}]},{},[1])(1)}); |
{ | ||
"name": "funnel-graph-js", | ||
"version": "1.3.3", | ||
"version": "1.3.4", | ||
"description": "SVG Funnel Graph Javascript Library", | ||
@@ -16,2 +16,11 @@ "main": "main.js", | ||
}, | ||
"keywords": [ | ||
"funnel", | ||
"chart", | ||
"graph", | ||
"funnel-chart", | ||
"funnel-graph", | ||
"svg-funnel-chart", | ||
"svg-funnel-graph" | ||
], | ||
"devDependencies": { | ||
@@ -18,0 +27,0 @@ "@babel/core": "^7.2.2", |
@@ -9,3 +9,3 @@ # FunnelGraph.js | ||
![GitHub last commit](https://img.shields.io/github/last-commit/greghub/funnel-graph-js.svg) | ||
![Gitter](https://img.shields.io/gitter/room/greghub/funnel-graph-js.svg) | ||
[![Gitter](https://img.shields.io/gitter/room/greghub/funnel-graph-js.svg)](https://gitter.im/funnel-graph-js/community) | ||
@@ -12,0 +12,0 @@ Funnel Graph JS is a library for generating a funnel chart. It generates an SVG chart, adds labels, legend and other info. |
@@ -100,3 +100,3 @@ const setAttrs = (element, attributes) => { | ||
export { | ||
generateLegendBackground, getDefaultColors, areEqual, createSVGElement, setAttrs, removeAttrs | ||
generateLegendBackground, getDefaultColors, areEqual, createSVGElement, setAttrs, removeAttrs, defaultColors | ||
}; |
@@ -166,4 +166,2 @@ /* eslint-disable no-trailing-spaces */ | ||
addLabels() { | ||
this.container.style.position = 'relative'; | ||
const holder = document.createElement('div'); | ||
@@ -259,2 +257,22 @@ holder.setAttribute('class', 'svg-funnel-js__labels'); | ||
setValues(v) { | ||
this.values = v; | ||
return this; | ||
} | ||
setDirection(d) { | ||
this.direction = d; | ||
return this; | ||
} | ||
setHeight(h) { | ||
this.height = h; | ||
return this; | ||
} | ||
setWidth(w) { | ||
this.width = w; | ||
return this; | ||
} | ||
static getValues(options) { | ||
@@ -267,10 +285,4 @@ if (!options.data) { | ||
if (data instanceof Array) { | ||
if (Number.isInteger(data[0])) { | ||
return data; | ||
} | ||
return data.map(item => item.value); | ||
} | ||
if (typeof data === 'object') { | ||
return options.data.values; | ||
return data.values; | ||
} | ||
@@ -394,7 +406,6 @@ | ||
drawPaths() { | ||
const svg = this.getSVG(); | ||
const paths = svg.querySelectorAll('path'); | ||
for (let i = 0; i < paths.length; i++) { | ||
getPathDefinitions() { | ||
const valuesNum = this.getCrossAxisPoints().length - 1; | ||
const paths = []; | ||
for (let i = 0; i < valuesNum; i++) { | ||
if (this.isVertical()) { | ||
@@ -406,3 +417,3 @@ const X = this.getCrossAxisPoints()[i]; | ||
const d = createVerticalPath(i, X, XNext, Y); | ||
paths[i].setAttribute('d', d); | ||
paths.push(d); | ||
} else { | ||
@@ -414,7 +425,19 @@ const X = this.getMainAxisPoints(); | ||
const d = createPath(i, X, Y, YNext); | ||
paths[i].setAttribute('d', d); | ||
paths.push(d); | ||
} | ||
} | ||
return paths; | ||
} | ||
drawPaths() { | ||
const svg = this.getSVG(); | ||
const paths = svg.querySelectorAll('path'); | ||
const definitions = this.getPathDefinitions(); | ||
definitions.forEach((definition, index) => { | ||
paths[index].setAttribute('d', definition); | ||
}); | ||
} | ||
draw() { | ||
@@ -421,0 +444,0 @@ this.createContainer(); |
@@ -5,3 +5,3 @@ /* eslint-disable no-undef */ | ||
import { generateLegendBackground, areEqual } from '../src/js/graph'; | ||
import FunnelGraph from '../src/js/index'; | ||
import FunnelGraph from '../index'; | ||
@@ -8,0 +8,0 @@ const assert = require('assert'); |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
114180
1779