UNPKG

realchart

Version:

Wooritech charting library

8 lines (6 loc) 13.6 kB
/** * RealChart Wordcloud v1.4.12 * Copyright (C) 2023-2026 WooriTech Inc. * All Rights Reserved. */ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("realchart")):"function"==typeof define&&define.amd?define(["exports","realchart"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).RealChartWordCloud={},t.RealChart)}(this,(function(t,e){"use strict";function n(t){var e=Object.create(null);return t&&Object.keys(t).forEach((function(n){if("default"!==n){var i=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(e,n,i.get?i:{enumerable:!0,get:function(){return t[n]}})}})),e.default=t,Object.freeze(e)}var i,r=n(e),o=(i=function(t,e){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},i(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e}(e.WidgetSeriesPoint),s=function(t){function e(e,n){var i=t.call(this,e)||this;return i.points=n,i}return o(e,t),e}(a),h=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return o(n,t),n.prototype.$_denormalizeFontSize=function(t,i,r){var o,a;return"min"==t?(o=e.calcPercent(e.parsePercentSize(n.MinFontSize,!1),i),a=e.calcPercent(e.parsePercentSize(n.MaxMinFontSize,!1),i)):(o=e.calcPercent(e.parsePercentSize(n.MinMaxFontSize,!1),i),a=e.calcPercent(e.parsePercentSize(n.MaxFontSize,!1),i)),r>1?a:r<0?o:r*(a-o)+o},n.prototype.calcFontRatio=function(t,n,i,r){return e.calcPercent(n,i,r)},n.prototype.getMinFontSize=function(t,i){var r=this._minFontSizeDim,o=r.fixed,a=r.size,s=o&&a<=1?this.$_denormalizeFontSize("min",t,a):e.calcPercent(this._minFontSizeDim,t,i);return Math.max(e.calcPercent(e.parsePercentSize(n.MinFontSize,!1),t),s)},n.prototype.getMaxFontSize=function(t,i){var r=this._maxFontSizeDim,o=r.fixed,a=r.size,s=o&&a<=1?this.$_denormalizeFontSize("max",t,a):e.calcPercent(this._maxFontSizeDim,t,i);return Math.min(e.calcPercent(e.parsePercentSize(n.MaxFontSize,!1),t),s)},n.prototype.getLogFunc=function(){var t=this._op.logBase;return t>=2?function(e){return Math.max(Math.log(e)/Math.log(t))}:function(t){return t}},n.prototype._colorByPoint=function(){return this._op.colorByPoint},n.prototype._createPoint=function(t){return new a(t)},n.prototype._createOthersPoint=function(t,e){return t.y=e.map((function(t){return t.y})).reduce((function(t,e){return t+e})),new s(t,e)},n.prototype._doApply=function(n){var i;t.prototype._doApply.call(this,n),(n.text!==this._text||e.Utils.equalArrays(this._excludes,n.excludes))&&(this._text=n.text,this._excludes=null===(i=n.excludes)||void 0===i?void 0:i.slice(),this._dataSourceDirty=!0),this._setDims(n,"minFontSize","maxFontSize")},n.prototype._doLoadPoints=function(n){var i=this._op,r=i.text,o=[];if(r){var a=Math.max(i.minLength||1,1),s={},h=i.excludes,c=r.split(/\s+/g);for(var u in Array.isArray(h)&&h.length>0&&(c=c.filter((function(t){return h.indexOf(t)<0}))),c.forEach((function(t){t.length>=a&&(t in s?s[t]++:s[t]=1)})),s)o.push({x:u,y:s[u]})}else if(Array.isArray(n)&&!(n.length>0&&"object"==typeof n[0]&&null!==n[0]))for(var l=0;l<n.length;l+=2)o.push({x:e.toStr(n[l]),y:n[l+1]||0});o.length>0&&(n=o.sort((function(t,e){return e.y-t.y}))),t.prototype._doLoadPoints.call(this,n)},n.prototype.isPointLabelVisible=function(t){return!1},n.prototype._prepareRender=function(){t.prototype._prepareRender.call(this),this.collectValues(null,null),this.prepareReferents(null),this.collectRanges(null,null)},n.type=e.WordCloudSeriesType,n.MinFontSize=8,n.MaxMinFontSize=15,n.MaxFontSize="15%",n.MinMaxFontSize="5%",n.defaults=e.extend(e.WidgetSeries.defaults,{frame:"rectangle",maxCount:100,maxFontSize:1,minFontSize:0,colorByPoint:!0,autoScale:!0,drawTimeout:2e4}),n}(e.WidgetSeries),c=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),u=Math.floor,l=function(){function t(t){this._options=t}return t.prototype.start=function(t,n,i,r,o,a){var s=this;this._container=t;var h="circle"===i.frame||"ellipse"===i.frame,c=i.autoScale,u=e.pickNum(i.seed,0)*Math.PI*2/360,l=Math.max(0,e.pickNum(i.wordGap,0)),p=r,f=0,_=o,d=0,y=0;this._prepare(i,r,o),this._unit,this._startTime=Date.now(),n.forEach((function(t){var e=t.point;if(s._findPos(t,h,i.shuffle,s._radius,u,l)){var n=t.box.bounds,r=n.x,o=n.y,a=n.width,c=n.height;s.$_placeWord(t),e.xPos=r+a/2,e.yPos=o,p=Math.min(p,r),f=Math.max(f,r+a),_=Math.min(_,o),d=Math.max(d,o+c),y++}else t.setVis(!1)})),e.Utils.log("Words placed.",y,"of",n.length);var x=f-p,m=d-_,g=r/2,M=o/2,v=c?1/(Math.max(x/r,m/o)+.02):1,w=~~((p+x/2-g)*v),P=~~((_+m/2-M)*v);return this._trans={x:w,y:P,cx:g,cy:M,rate:v},n.forEach((function(t){var e=t.point;e.xPos=g-w+(e.xPos-g)*v,e.yPos=M-P+(e.yPos-M)*v})),this.$_transform(),null==a||a(n),this},t.prototype.stop=function(){},t.prototype.$_transform=function(t){void 0===t&&(t=1);var n=this._trans,i=n.x,r=n.y,o=n.cx,a=n.cy,s=n.rate;if(i=~~(i*t),r=~~(r*t),e.isIE){var h=s*t,c=o*(1-h),u=a*(1-h);this._container.trans(-i+c,-r+u),this._container.scale(h)}else this._container.dom.setAttribute("transform-origin","".concat(o," ").concat(a)),this._container.trans(-i,-r),this._container.scale(s*t)},t.prototype._prepare=function(t,e,n){var i=this._unit=8;this._grid=[],this._cols=u(e/i),this._rows=u(n/i),this._radius=u(Math.sqrt(this._cols*this._cols+this._rows*this._rows)/2);var r=2*this._radius;this._center={c:this._radius,r:this._radius};for(var o=0;o<r;o++)this._grid.push([]);this._rdPoints=[],this._ellipticity="ellipse"===t.frame||"rectangle"===t.frame?n/e:1},t.prototype._isOverlapping=function(t){for(var e=this._grid,n=t.r1;n<=t.r2;n++)for(var i=t.c1;i<=t.c2;i++)if(e[n]||(e[n]=[]),e[n][i])return!0;return!1},t.prototype.$_placeWord=function(t){for(var e=this._grid,n=t.box,i=n.r1;i<=n.r2;i++)for(var r=n.c1;r<=n.c2;r++)e[i][r]=t},t.prototype._getPoints=function(t,e,n){if(this._rdPoints[t])return this._rdPoints[t];var i=this._center,r=this._ellipticity,o=Math.min(t*this._unit,64),a=0,s=[];for(0===t&&s.push([i.c,i.r]);a<o;){var h=a/o*2*Math.PI+n,c=t*Math.cos(h)/r,u=t*Math.sin(h);if(!e){var l=Math.max(Math.abs(Math.cos(h)),Math.abs(Math.sin(h)));c/=l,u/=l}s.push([~~(i.c+c),~~(i.r+u)]),a++}return this._rdPoints[t]=s},t.prototype._rotatePoint=function(t,e,n){var i=e*Math.PI/180,r=Math.cos(i),o=Math.sin(i),a=t.x,s=t.y,h=t.width,c=t.height,u=a+h,l=s+c,p=a+h/2,f=s+c/2,_=[{x:a,y:s},{x:u,y:s},{x:a,y:l},{x:u,y:l}].map((function(t){return{x:p+(t.x-p)*r-(t.y-f)*o,y:f+(t.x-p)*o+(t.y-f)*r}})),d=Math.min.apply(Math,_.map((function(t){return t.x}))),y=Math.min.apply(Math,_.map((function(t){return t.y}))),x=Math.max.apply(Math,_.map((function(t){return t.x}))),m=Math.max.apply(Math,_.map((function(t){return t.y}))),g=this._unit,M=x-d,v=m-y;return{c1:Math.max(0,~~(d/g)),r1:Math.max(0,~~(y/g)),c2:~~(x/g),r2:~~(m/g)+n,bounds:{x:d,y:y,width:M,height:v}}},t.prototype._getBox=function(t,e,n,i,r){void 0===r&&(r=0);var o=this._unit,a=t.getBBox().width,s=t.hText,h=a/o,c=s/o,u=Math.ceil(h/2),l=Math.ceil(c/2),p=Math.max(0,e-u),f=Math.max(0,n-l),_=p+Math.ceil(h),d=f+Math.ceil(c),y={x:(e-u)*o,y:(n-l)*o,width:a,height:s};return r?this._rotatePoint(y,r,i):{c1:p,r1:f,c2:_+i,r2:d,bounds:y}},t.prototype.$_drawDebugBox=function(t,n){var i=this._container.doc,r=t.bounds,o=r.x,a=r.y,s=r.width,h=r.height,c=e.RectElement.create(i,"",o,a,s,h);c.setFill((null==n?void 0:n.fill)||"#ff000055"),c.setStroke((null==n?void 0:n.stroke)||"none"),c.setAttr("stroke-dasharray",(null==n?void 0:n.strokeDashArray)||"4"),this._container.add(c)},t.prototype._findPos=function(t,n,i,r,o,a){var s=this,h=0,c=0;r=Math.max(r,this._grid.length+1);for(var u=[0,-90],l=u.length;h<r;){var p=Date.now()-this._startTime;if(p>e.pickNum(this._options.drawTimeout,5e3))throw new Error("단어배치 시간이 ".concat(p," ms 경과하여 중단합니다."));var f=this._getPoints(h,n,o+c++%4*(Math.PI/4));if(i&&e.Utils.shuffle(f),f.some((function(n,i){var r=s._options.rotation?u[~~(e.Utils.randomLike(i+o)*l)]:0,h=s._getBox(t,n[0],n[1],a,r);if(!s._isOverlapping(h)){if(h.bounds.x<0||h.bounds.y<0)return!1;var c=s._getBox(t,n[0],n[1],a).bounds,p={x:c.width/2,y:c.height/2};return t.wx=c.x,t.wy=c.y,t.setRotation(p.x,p.y,r),t.box=h,!0}})))return!0;h++}},t}(),p=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return c(e,t),e.prototype._findPos=function(t,e,n,i,r,o){var a=this;if(this._getPoints(i,e,n?Math.random()*Math.PI*2:r).some((function(e){var n=a._getBox(t,e[0],e[1],o);if(!a._isOverlapping(n))return t.box=n,!0})))return!0},e.prototype._getPoints=function(t,e,n){var i=this._center,r=this._ellipticity,o=2*t*this._unit,a=-1,s=[];0===t&&s.push([i.c,i.r]);var h=n>Math.PI?1:-1;if(e)for(;++a<o;){var c=a/o,u=n+a*c*h,l=t*c;f=l*Math.cos(u)/r,p=l*Math.sin(u),_=i.c+f,d=i.r+p;s.push([~~_,~~d])}else for(var p,f=(p=this._unit>>1)/r,_=i.c+f*Math.cos(n),d=i.r+p*Math.sin(n),y=Math.max(1,this._unit>>1),x=y-Math.max(1,y>>1);++a>=0;){switch(f=(p=1+x*Math.pow(.99,a))/r,3&(h*Math.sqrt(1+8*a)-1)/2){case 0:_+=f;break;case 1:d+=p;break;case 2:_-=f;break;default:d-=p}if(Math.max(Math.abs(_-t),Math.abs(d-t))>t)break;s.push([~~_,~~d])}return s},e.prototype._getBox=function(t,e,n,i){var r=this._unit,o=t.getBBox(),a=t.hText,s=Math.min(2*this._radius,Math.max(0,e-u(o.width/2/r))),h=Math.min(2*this._radius,Math.max(0,n-u(a/2/r)));return{c1:s,r1:h,c2:s+u(o.width/r)+i,r2:h+u(a/r),w:t.width,h:a}},e}(l),f=function(t){function n(n){var i=t.call(this,n,e.SeriesView.POINT_CLASS)||this;return i.add(i.hintView=new e.RectElement(n)),i.hintView.setStyles({stroke:"none",fill:"transparent"}),i.add(i.textView=new e.TextElement(n)),i.textView.setStyle("pointerEvents","none"),i}return c(n,t),n.prototype.getBBox=function(){return this._bbox?this._bbox:this._bbox=this.textView.getBBox()},n.prototype.layout=function(){var t=this.getBBox();this.hintView.setRect({x:0,y:this.yText*n.TOP_PAD,width:t.width,height:this.hText-this.yText}),this.textView.transY(-this.yText*n.TOP_PAD)},n.TOP_PAD=.5,n}(e.RcElement),_=function(t){function n(n){var i=t.call(this,n,"rct-wordcloud-series")||this;return i._pointContainer.add(i._wordContainer=new e.LayerElement(n,null)),i._words=new e.ElementPool(i._wordContainer,f),i}return c(n,t),n.prototype._getPointPool=function(){return this._words},n.prototype.needFronting=function(){return!1},n.prototype.getClipContainer=function(){return null},n.prototype.isEmptyView=function(){return this._empty},n.prototype._refreshZombie=function(){},n.prototype._renderSeries=function(t,n){var i=this,r=this.model.options,o=r.text;if(t!==this._wSave||n!==this._hSave||o!==this._tSave){var a=+new Date,s=this._visPoints.slice();if(r.minWeight>0&&(s=s.filter((function(t){return t.yValue>=r.minWeight}))),r.minLength>1&&(s=s.filter((function(t){return t.x.length>=r.minLength}))),r.maxCount<s.length&&(s.length=Math.max(0,r.maxCount)),this.$_prepareWords(this.doc,this.model,s),"spiral"===r.placer)this._placer=new p(r).start(this._wordContainer,this._words._internalItems(),r,t,n,(function(e){i.$_layoutWords(t,n)}));else this._placer=new l(r).start(this._wordContainer,this._words._internalItems(),r,t,n,(function(e){i.$_layoutWords(t,n)}));this._wSave=t,this._hSave=n,this._tSave=o,this._empty=s.length<1,e.Utils.log(s.length+" words placed in "+(+new Date-a)+"ms.")}else this.$_layoutWords(t,n)},n.prototype._runShowEffect=function(t){t&&e.SeriesAnimation.spread(this,(function(){}))},n.prototype._doPosRateChanged=function(t){this.$_layoutWords(this.width,this.height)},n.prototype.$_prepareWords=function(t,n,i){var r,o=this,a=n._minY,s=n._maxY,h=s-a,c=this.height,u=n.getMaxFontSize(c,1),l=Math.min(u,n.getMinFontSize(c,0)),p=a===s||l===u,_=p?NaN:n.options.logBase,d=getComputedStyle(this._wordContainer.dom).fontFamily,y=Math.min(2,Math.max(.1,+n.options.textHeight)),x=isNaN(y)?t.createElement("canvas").getContext("2d"):null,m=1-f.TOP_PAD;this._words.prepare(i.length,(function(s,c){var f=s.point=i[c],g=s.textView;s._bbox=null;var M=(f.y-a)/h;_>1&&(M=1-(Math.pow(_,1-M)-1)/(_-1));var v=l+(p?(u-l)/2:M*(u-l)),w=f.x;o._preparePoint(t,n,f,s),delete s.box,g.text=w,g.anchor=e.TextAnchor.START,g.setStyles({fontSize:e.pixel(v)}),g.layoutText(),x?(x.font="".concat(e.pixel(v)," ").concat(d),r=x.measureText(w),s.yText=.9*Math.max(0,r.fontBoundingBoxAscent-r.actualBoundingBoxAscent),s.hText=Math.ceil((r.actualBoundingBoxAscent+r.actualBoundingBoxDescent)*(v<=10?1.1:1.08)-.1)+s.yText*m):(s.yText=0,s.hText=s.getBBox().height*y),s.layout(),s.setVis(!0)}))},n.prototype.$_layoutWords=function(t,e){var n,i=this._getPosRate();null===(n=this._placer)||void 0===n||n.$_transform(i),i=1-i,this._words.forEach((function(n){var r=n.box.bounds,o=r.width,a=r.height,s=(t-o)/2,h=(e-a)/2;n.trans(n.wx-(n.wx-s)*i,n.wy-(n.wy-h)*i)}))},n}(e.WidgetSeriesView);function d(t){(function(t){return t.Series&&t.SeriesView})(t)&&(t.Series.register(h),t.SeriesView.register([h,_]))}d(r),t.WordCloudSeries=h,t.default=d,Object.defineProperty(t,"__esModule",{value:!0})}));