{"version":3,"sources":["webpack://echarts-wordcloud/webpack/universalModuleDefinition","webpack://echarts-wordcloud/./src/WordCloudSeries.js","webpack://echarts-wordcloud/./src/WordCloudView.js","webpack://echarts-wordcloud/./src/layout.js","webpack://echarts-wordcloud/./src/wordCloud.js","webpack://echarts-wordcloud/external \"echarts\"","webpack://echarts-wordcloud/webpack/bootstrap","webpack://echarts-wordcloud/webpack/startup","webpack://echarts-wordcloud/webpack/runtime/make namespace object"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE__83__","type","visualStyleAccessPath","visualStyleMapper","model","fill","get","visualDrawType","optionUpdated","option","this","gridSize","Math","max","floor","getInitialData","ecModel","dimensions","data","coordDimensions","list","initData","defaultOption","maskImage","shape","keepAspect","left","top","width","height","sizeRange","rotationRange","rotationStep","drawOutOfBound","shrinkToFit","textStyle","fontWeight","render","seriesModel","api","group","removeAll","getData","layoutInstance","ondraw","text","size","dataIdx","drawn","itemModel","getItemModel","textStyleModel","getModel","textEl","style","scaleX","info","mu","scaleY","x","gx","gw","y","gy","gh","rotation","rot","setStyle","fillTextOffsetX","fillTextOffsetY","verticalAlign","getItemVisual","fontSize","add","setItemGraphicEl","ensureState","state","stateTransition","duration","easing","__highDownDispatcher","_model","remove","dispose","window","setImmediate","msSetImmediate","webkitSetImmediate","mozSetImmediate","oSetImmediate","postMessage","addEventListener","callbacks","undefined","message","evt","substr","length","stopImmediatePropagation","id","parseInt","clearImmediate","callback","push","toString","fn","setTimeout","msClearImmediate","webkitClearImmediate","mozClearImmediate","oClearImmediate","timer","clearTimeout","isSupported","canvas","document","createElement","getContext","ctx","getImageData","fillText","Array","prototype","some","minFontSize","hanWidth","mWidth","font","measureText","shuffleArray","arr","j","i","random","WordCloud","elements","options","timerId","Date","now","isArray","forEach","el","getElementById","Error","tagName","appendChild","settings","fontFamily","color","minSize","weightFactor","clearCanvas","backgroundColor","origin","drawMask","maskColor","maskGapWidth","layoutAnimation","wait","abortThreshold","abort","minRotation","PI","maxRotation","shuffle","rotateRatio","ellipticity","classes","hover","click","key","factor","pt","theta","sin","thetaPrime","cos","min","abs","sqrt","grid","ngx","ngy","center","maxRadius","escapeTime","getTextColor","getTextFontWeight","g","maskRectWidth","randomHslColor","getTextClasses","hovered","interactive","infoGrid","getInfoGridFromMouseTouchEvent","clientX","clientY","currentTarget","rect","getBoundingClientRect","touches","eventX","eventY","wordcloudhover","item","dimension","wordcloudclick","preventDefault","pointsAtRadius","getPointsAtRadius","radius","T","t","points","rx","exceedTime","getTime","fillGridAt","fillRect","putWord","loopIndex","word","weight","attributes","gxy","rotateDeg","round","extraDataArray","itemCopy","slice","splice","getItemExtraData","fcanvas","fctx","willReadFrequently","fw","fh","boxWidth","boxHeight","fgw","ceil","fgh","cgh","cgw","setAttribute","scale","translate","rotate","fillStyle","textBaseline","imageData","occupied","bounds","singleGridLoop","fillTextWidth","fillTextHeight","getTextInfo","r","concat","res","px","py","canFitText","distance","save","restore","span","transformRule","styleRules","position","display","lineHeight","whiteSpace","transform","webkitTransform","msTransform","transformOrigin","webkitTransformOrigin","msTransformOrigin","cssProp","textContent","attribute","className","drawText","w","h","updateGrid","sendEvent","cancelable","details","event","CustomEvent","detail","dispatchEvent","loopingFunction","stoppingFunction","clearRect","bctx","bgPixel","e","webkitTapHighlightColor","stopInteraction","removeEventListener","layouting","cb","listener","anotherWordCloudStart","loop","canceled","start","toFixed","eachSeriesByType","gridRect","getBoxLayoutParams","getWidth","getHeight","ratio","aspect","adjustRectAspect","drawImage","maskCanvas","newImageData","createImageData","toneSum","toneCnt","tone","threshold","putImageData","updateCanvasMask","console","error","valueExtent","getDataExtent","DEGREE_TO_RAD","onWordCloudDrawn","mapArray","value","idx","getName","sort","a","b","series","compats","compatTextStyle","hasOwnProperty","seriesItem","normal","emphasis","__webpack_module_cache__","__webpack_require__","moduleId","__webpack_modules__","Symbol","toStringTag","Object","defineProperty"],"mappings":"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","file":"echarts-wordcloud.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"echarts\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"echarts\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"echarts-wordcloud\"] = factory(require(\"echarts\"));\n\telse\n\t\troot[\"echarts-wordcloud\"] = factory(root[\"echarts\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE__83__) {\nreturn ","import * as echarts from 'echarts/lib/echarts';\n\necharts.extendSeriesModel({\n type: 'series.wordCloud',\n\n visualStyleAccessPath: 'textStyle',\n visualStyleMapper: function (model) {\n return {\n fill: model.get('color')\n };\n },\n visualDrawType: 'fill',\n\n optionUpdated: function () {\n var option = this.option;\n option.gridSize = Math.max(Math.floor(option.gridSize), 4);\n },\n\n getInitialData: function (option, ecModel) {\n var dimensions = echarts.helper.createDimensions(option.data, {\n coordDimensions: ['value']\n });\n var list = new echarts.List(dimensions, this);\n list.initData(option.data);\n return list;\n },\n\n // Most of options are from https://github.com/timdream/wordcloud2.js/blob/gh-pages/API.md\n defaultOption: {\n maskImage: null,\n\n // Shape can be 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star'\n shape: 'circle',\n keepAspect: false,\n\n left: 'center',\n\n top: 'center',\n\n width: '70%',\n\n height: '80%',\n\n sizeRange: [12, 60],\n\n rotationRange: [-90, 90],\n\n rotationStep: 45,\n\n gridSize: 8,\n\n drawOutOfBound: false,\n shrinkToFit: false,\n\n textStyle: {\n fontWeight: 'normal'\n }\n }\n});\n","import * as echarts from 'echarts/lib/echarts';\n\necharts.extendChartView({\n type: 'wordCloud',\n\n render: function (seriesModel, ecModel, api) {\n var group = this.group;\n group.removeAll();\n\n var data = seriesModel.getData();\n\n var gridSize = seriesModel.get('gridSize');\n\n seriesModel.layoutInstance.ondraw = function (text, size, dataIdx, drawn) {\n var itemModel = data.getItemModel(dataIdx);\n var textStyleModel = itemModel.getModel('textStyle');\n\n var textEl = new echarts.graphic.Text({\n style: echarts.helper.createTextStyle(textStyleModel),\n scaleX: 1 / drawn.info.mu,\n scaleY: 1 / drawn.info.mu,\n x: (drawn.gx + drawn.info.gw / 2) * gridSize,\n y: (drawn.gy + drawn.info.gh / 2) * gridSize,\n rotation: drawn.rot\n });\n textEl.setStyle({\n x: drawn.info.fillTextOffsetX,\n y: drawn.info.fillTextOffsetY + size * 0.5,\n text: text,\n verticalAlign: 'middle',\n fill: data.getItemVisual(dataIdx, 'style').fill,\n fontSize: size\n });\n\n group.add(textEl);\n\n data.setItemGraphicEl(dataIdx, textEl);\n\n textEl.ensureState('emphasis').style = echarts.helper.createTextStyle(\n itemModel.getModel(['emphasis', 'textStyle']),\n {\n state: 'emphasis'\n }\n );\n textEl.ensureState('blur').style = echarts.helper.createTextStyle(\n itemModel.getModel(['blur', 'textStyle']),\n {\n state: 'blur'\n }\n );\n\n echarts.helper.enableHoverEmphasis(\n textEl,\n itemModel.get(['emphasis', 'focus']),\n itemModel.get(['emphasis', 'blurScope'])\n );\n\n textEl.stateTransition = {\n duration: seriesModel.get('animation')\n ? seriesModel.get(['stateAnimation', 'duration'])\n : 0,\n easing: seriesModel.get(['stateAnimation', 'easing'])\n };\n // TODO\n textEl.__highDownDispatcher = true;\n };\n\n this._model = seriesModel;\n },\n\n remove: function () {\n this.group.removeAll();\n\n this._model.layoutInstance.dispose();\n },\n\n dispose: function () {\n this._model.layoutInstance.dispose();\n }\n});\n","/*!\n * wordcloud2.js\n * http://timdream.org/wordcloud2.js/\n *\n * Copyright 2011 - 2019 Tim Guan-tin Chien and contributors.\n * Released under the MIT license\n */\n\n'use strict';\n\n// setImmediate\nif (!window.setImmediate) {\n window.setImmediate = (function setupSetImmediate() {\n return (\n window.msSetImmediate ||\n window.webkitSetImmediate ||\n window.mozSetImmediate ||\n window.oSetImmediate ||\n (function setupSetZeroTimeout() {\n if (!window.postMessage || !window.addEventListener) {\n return null;\n }\n\n var callbacks = [undefined];\n var message = 'zero-timeout-message';\n\n // Like setTimeout, but only takes a function argument. There's\n // no time argument (always zero) and no arguments (you have to\n // use a closure).\n var setZeroTimeout = function setZeroTimeout(callback) {\n var id = callbacks.length;\n callbacks.push(callback);\n window.postMessage(message + id.toString(36), '*');\n\n return id;\n };\n\n window.addEventListener(\n 'message',\n function setZeroTimeoutMessage(evt) {\n // Skipping checking event source, retarded IE confused this window\n // object with another in the presence of iframe\n if (\n typeof evt.data !== 'string' ||\n evt.data.substr(0, message.length) !== message /* ||\n evt.source !== window */\n ) {\n return;\n }\n\n evt.stopImmediatePropagation();\n\n var id = parseInt(evt.data.substr(message.length), 36);\n if (!callbacks[id]) {\n return;\n }\n\n callbacks[id]();\n callbacks[id] = undefined;\n },\n true\n );\n\n /* specify clearImmediate() here since we need the scope */\n window.clearImmediate = function clearZeroTimeout(id) {\n if (!callbacks[id]) {\n return;\n }\n\n callbacks[id] = undefined;\n };\n\n return setZeroTimeout;\n })() ||\n // fallback\n function setImmediateFallback(fn) {\n window.setTimeout(fn, 0);\n }\n );\n })();\n}\n\nif (!window.clearImmediate) {\n window.clearImmediate = (function setupClearImmediate() {\n return (\n window.msClearImmediate ||\n window.webkitClearImmediate ||\n window.mozClearImmediate ||\n window.oClearImmediate ||\n // \"clearZeroTimeout\" is implement on the previous block ||\n // fallback\n function clearImmediateFallback(timer) {\n window.clearTimeout(timer);\n }\n );\n })();\n}\n\n// Check if WordCloud can run on this browser\nvar isSupported = (function isSupported() {\n var canvas = document.createElement('canvas');\n if (!canvas || !canvas.getContext) {\n return false;\n }\n\n var ctx = canvas.getContext('2d');\n if (!ctx) {\n return false;\n }\n if (!ctx.getImageData) {\n return false;\n }\n if (!ctx.fillText) {\n return false;\n }\n\n if (!Array.prototype.some) {\n return false;\n }\n if (!Array.prototype.push) {\n return false;\n }\n\n return true;\n})();\n\n// Find out if the browser impose minium font size by\n// drawing small texts on a canvas and measure it's width.\nvar minFontSize = (function getMinFontSize() {\n if (!isSupported) {\n return;\n }\n\n var ctx = document.createElement('canvas').getContext('2d');\n\n // start from 20\n var size = 20;\n\n // two sizes to measure\n var hanWidth, mWidth;\n\n while (size) {\n ctx.font = size.toString(10) + 'px sans-serif';\n if (\n ctx.measureText('\\uFF37').width === hanWidth &&\n ctx.measureText('m').width === mWidth\n ) {\n return size + 1;\n }\n\n hanWidth = ctx.measureText('\\uFF37').width;\n mWidth = ctx.measureText('m').width;\n\n size--;\n }\n\n return 0;\n})();\n\nvar getItemExtraData = function (item) {\n if (Array.isArray(item)) {\n var itemCopy = item.slice();\n // remove data we already have (word and weight)\n itemCopy.splice(0, 2);\n return itemCopy;\n } else {\n return [];\n }\n};\n\n// Based on http://jsfromhell.com/array/shuffle\nvar shuffleArray = function shuffleArray(arr) {\n for (var j, x, i = arr.length; i; ) {\n j = Math.floor(Math.random() * i);\n x = arr[--i];\n arr[i] = arr[j];\n arr[j] = x;\n }\n return arr;\n};\n\nvar timer = {};\nvar WordCloud = function WordCloud(elements, options) {\n if (!isSupported) {\n return;\n }\n\n var timerId = Math.floor(Math.random() * Date.now());\n\n if (!Array.isArray(elements)) {\n elements = [elements];\n }\n\n elements.forEach(function (el, i) {\n if (typeof el === 'string') {\n elements[i] = document.getElementById(el);\n if (!elements[i]) {\n throw new Error('The element id specified is not found.');\n }\n } else if (!el.tagName && !el.appendChild) {\n throw new Error(\n 'You must pass valid HTML elements, or ID of the element.'\n );\n }\n });\n\n /* Default values to be overwritten by options object */\n var settings = {\n list: [],\n fontFamily:\n '\"Trebuchet MS\", \"Heiti TC\", \"微軟正黑體\", ' +\n '\"Arial Unicode MS\", \"Droid Fallback Sans\", sans-serif',\n fontWeight: 'normal',\n color: 'random-dark',\n minSize: 0, // 0 to disable\n weightFactor: 1,\n clearCanvas: true,\n backgroundColor: '#fff', // opaque white = rgba(255, 255, 255, 1)\n\n gridSize: 8,\n drawOutOfBound: false,\n shrinkToFit: false,\n origin: null,\n\n drawMask: false,\n maskColor: 'rgba(255,0,0,0.3)',\n maskGapWidth: 0.3,\n\n layoutAnimation: true,\n\n wait: 0,\n abortThreshold: 0, // disabled\n abort: function noop() {},\n\n minRotation: -Math.PI / 2,\n maxRotation: Math.PI / 2,\n rotationStep: 0.1,\n\n shuffle: true,\n rotateRatio: 0.1,\n\n shape: 'circle',\n ellipticity: 0.65,\n\n classes: null,\n\n hover: null,\n click: null\n };\n\n if (options) {\n for (var key in options) {\n if (key in settings) {\n settings[key] = options[key];\n }\n }\n }\n\n /* Convert weightFactor into a function */\n if (typeof settings.weightFactor !== 'function') {\n var factor = settings.weightFactor;\n settings.weightFactor = function weightFactor(pt) {\n return pt * factor; // in px\n };\n }\n\n /* Convert shape into a function */\n if (typeof settings.shape !== 'function') {\n switch (settings.shape) {\n case 'circle':\n /* falls through */\n default:\n // 'circle' is the default and a shortcut in the code loop.\n settings.shape = 'circle';\n break;\n\n case 'cardioid':\n settings.shape = function shapeCardioid(theta) {\n return 1 - Math.sin(theta);\n };\n break;\n\n /*\n To work out an X-gon, one has to calculate \"m\",\n where 1/(cos(2*PI/X)+m*sin(2*PI/X)) = 1/(cos(0)+m*sin(0))\n http://www.wolframalpha.com/input/?i=1%2F%28cos%282*PI%2FX%29%2Bm*sin%28\n 2*PI%2FX%29%29+%3D+1%2F%28cos%280%29%2Bm*sin%280%29%29\n Copy the solution into polar equation r = 1/(cos(t') + m*sin(t'))\n where t' equals to mod(t, 2PI/X);\n */\n\n case 'diamond':\n // http://www.wolframalpha.com/input/?i=plot+r+%3D+1%2F%28cos%28mod+\n // %28t%2C+PI%2F2%29%29%2Bsin%28mod+%28t%2C+PI%2F2%29%29%29%2C+t+%3D\n // +0+..+2*PI\n settings.shape = function shapeSquare(theta) {\n var thetaPrime = theta % ((2 * Math.PI) / 4);\n return 1 / (Math.cos(thetaPrime) + Math.sin(thetaPrime));\n };\n break;\n\n case 'square':\n // http://www.wolframalpha.com/input/?i=plot+r+%3D+min(1%2Fabs(cos(t\n // )),1%2Fabs(sin(t)))),+t+%3D+0+..+2*PI\n settings.shape = function shapeSquare(theta) {\n return Math.min(\n 1 / Math.abs(Math.cos(theta)),\n 1 / Math.abs(Math.sin(theta))\n );\n };\n break;\n\n case 'triangle-forward':\n // http://www.wolframalpha.com/input/?i=plot+r+%3D+1%2F%28cos%28mod+\n // %28t%2C+2*PI%2F3%29%29%2Bsqrt%283%29sin%28mod+%28t%2C+2*PI%2F3%29\n // %29%29%2C+t+%3D+0+..+2*PI\n settings.shape = function shapeTriangle(theta) {\n var thetaPrime = theta % ((2 * Math.PI) / 3);\n return (\n 1 / (Math.cos(thetaPrime) + Math.sqrt(3) * Math.sin(thetaPrime))\n );\n };\n break;\n\n case 'triangle':\n case 'triangle-upright':\n settings.shape = function shapeTriangle(theta) {\n var thetaPrime = (theta + (Math.PI * 3) / 2) % ((2 * Math.PI) / 3);\n return (\n 1 / (Math.cos(thetaPrime) + Math.sqrt(3) * Math.sin(thetaPrime))\n );\n };\n break;\n\n case 'pentagon':\n settings.shape = function shapePentagon(theta) {\n var thetaPrime = (theta + 0.955) % ((2 * Math.PI) / 5);\n return 1 / (Math.cos(thetaPrime) + 0.726543 * Math.sin(thetaPrime));\n };\n break;\n\n case 'star':\n settings.shape = function shapeStar(theta) {\n var thetaPrime = (theta + 0.955) % ((2 * Math.PI) / 10);\n if (\n ((theta + 0.955) % ((2 * Math.PI) / 5)) - (2 * Math.PI) / 10 >=\n 0\n ) {\n return (\n 1 /\n (Math.cos((2 * Math.PI) / 10 - thetaPrime) +\n 3.07768 * Math.sin((2 * Math.PI) / 10 - thetaPrime))\n );\n } else {\n return 1 / (Math.cos(thetaPrime) + 3.07768 * Math.sin(thetaPrime));\n }\n };\n break;\n }\n }\n\n /* Make sure gridSize is a whole number and is not smaller than 4px */\n settings.gridSize = Math.max(Math.floor(settings.gridSize), 4);\n\n /* shorthand */\n var g = settings.gridSize;\n var maskRectWidth = g - settings.maskGapWidth;\n\n /* normalize rotation settings */\n var rotationRange = Math.abs(settings.maxRotation - settings.minRotation);\n var minRotation = Math.min(settings.maxRotation, settings.minRotation);\n var rotationStep = settings.rotationStep;\n\n /* information/object available to all functions, set when start() */\n var grid, // 2d array containing filling information\n ngx,\n ngy, // width and height of the grid\n center, // position of the center of the cloud\n maxRadius;\n\n /* timestamp for measuring each putWord() action */\n var escapeTime;\n\n /* function for getting the color of the text */\n var getTextColor;\n function randomHslColor(min, max) {\n return (\n 'hsl(' +\n (Math.random() * 360).toFixed() +\n ',' +\n (Math.random() * 30 + 70).toFixed() +\n '%,' +\n (Math.random() * (max - min) + min).toFixed() +\n '%)'\n );\n }\n switch (settings.color) {\n case 'random-dark':\n getTextColor = function getRandomDarkColor() {\n return randomHslColor(10, 50);\n };\n break;\n\n case 'random-light':\n getTextColor = function getRandomLightColor() {\n return randomHslColor(50, 90);\n };\n break;\n\n default:\n if (typeof settings.color === 'function') {\n getTextColor = settings.color;\n }\n break;\n }\n\n /* function for getting the font-weight of the text */\n var getTextFontWeight;\n if (typeof settings.fontWeight === 'function') {\n getTextFontWeight = settings.fontWeight;\n }\n\n /* function for getting the classes of the text */\n var getTextClasses = null;\n if (typeof settings.classes === 'function') {\n getTextClasses = settings.classes;\n }\n\n /* Interactive */\n var interactive = false;\n var infoGrid = [];\n var hovered;\n\n var getInfoGridFromMouseTouchEvent = function getInfoGridFromMouseTouchEvent(\n evt\n ) {\n var canvas = evt.currentTarget;\n var rect = canvas.getBoundingClientRect();\n var clientX;\n var clientY;\n /** Detect if touches are available */\n if (evt.touches) {\n clientX = evt.touches[0].clientX;\n clientY = evt.touches[0].clientY;\n } else {\n clientX = evt.clientX;\n clientY = evt.clientY;\n }\n var eventX = clientX - rect.left;\n var eventY = clientY - rect.top;\n\n var x = Math.floor((eventX * (canvas.width / rect.width || 1)) / g);\n var y = Math.floor((eventY * (canvas.height / rect.height || 1)) / g);\n\n if (!infoGrid[x]) {\n return null\n }\n\n return infoGrid[x][y];\n };\n\n var wordcloudhover = function wordcloudhover(evt) {\n var info = getInfoGridFromMouseTouchEvent(evt);\n\n if (hovered === info) {\n return;\n }\n\n hovered = info;\n if (!info) {\n settings.hover(undefined, undefined, evt);\n\n return;\n }\n\n settings.hover(info.item, info.dimension, evt);\n };\n\n var wordcloudclick = function wordcloudclick(evt) {\n var info = getInfoGridFromMouseTouchEvent(evt);\n if (!info) {\n return;\n }\n\n settings.click(info.item, info.dimension, evt);\n evt.preventDefault();\n };\n\n /* Get points on the grid for a given radius away from the center */\n var pointsAtRadius = [];\n var getPointsAtRadius = function getPointsAtRadius(radius) {\n if (pointsAtRadius[radius]) {\n return pointsAtRadius[radius];\n }\n\n // Look for these number of points on each radius\n var T = radius * 8;\n\n // Getting all the points at this radius\n var t = T;\n var points = [];\n\n if (radius === 0) {\n points.push([center[0], center[1], 0]);\n }\n\n while (t--) {\n // distort the radius to put the cloud in shape\n var rx = 1;\n if (settings.shape !== 'circle') {\n rx = settings.shape((t / T) * 2 * Math.PI); // 0 to 1\n }\n\n // Push [x, y, t]; t is used solely for getTextColor()\n points.push([\n center[0] + radius * rx * Math.cos((-t / T) * 2 * Math.PI),\n center[1] +\n radius * rx * Math.sin((-t / T) * 2 * Math.PI) * settings.ellipticity,\n (t / T) * 2 * Math.PI\n ]);\n }\n\n pointsAtRadius[radius] = points;\n return points;\n };\n\n /* Return true if we had spent too much time */\n var exceedTime = function exceedTime() {\n return (\n settings.abortThreshold > 0 &&\n new Date().getTime() - escapeTime > settings.abortThreshold\n );\n };\n\n /* Get the deg of rotation according to settings, and luck. */\n var getRotateDeg = function getRotateDeg() {\n if (settings.rotateRatio === 0) {\n return 0;\n }\n\n if (Math.random() > settings.rotateRatio) {\n return 0;\n }\n\n if (rotationRange === 0) {\n return minRotation;\n }\n\n return minRotation + Math.round(Math.random() * rotationRange / rotationStep) * rotationStep;\n };\n\n var getTextInfo = function getTextInfo(\n word,\n weight,\n rotateDeg,\n extraDataArray\n ) {\n // calculate the acutal font size\n // fontSize === 0 means weightFactor function wants the text skipped,\n // and size < minSize means we cannot draw the text.\n var debug = false;\n var fontSize = settings.weightFactor(weight);\n if (fontSize <= settings.minSize) {\n return false;\n }\n\n // Scale factor here is to make sure fillText is not limited by\n // the minium font size set by browser.\n // It will always be 1 or 2n.\n var mu = 1;\n if (fontSize < minFontSize) {\n mu = (function calculateScaleFactor() {\n var mu = 2;\n while (mu * fontSize < minFontSize) {\n mu += 2;\n }\n return mu;\n })();\n }\n\n // Get fontWeight that will be used to set fctx.font\n var fontWeight;\n if (getTextFontWeight) {\n fontWeight = getTextFontWeight(word, weight, fontSize, extraDataArray);\n } else {\n fontWeight = settings.fontWeight;\n }\n\n var fcanvas = document.createElement('canvas');\n var fctx = fcanvas.getContext('2d', { willReadFrequently: true });\n\n fctx.font =\n fontWeight +\n ' ' +\n (fontSize * mu).toString(10) +\n 'px ' +\n settings.fontFamily;\n\n // Estimate the dimension of the text with measureText().\n var fw = fctx.measureText(word).width / mu;\n var fh =\n Math.max(\n fontSize * mu,\n fctx.measureText('m').width,\n fctx.measureText('\\uFF37').width\n ) / mu;\n\n // Create a boundary box that is larger than our estimates,\n // so text don't get cut of (it sill might)\n var boxWidth = fw + fh * 2;\n var boxHeight = fh * 3;\n var fgw = Math.ceil(boxWidth / g);\n var fgh = Math.ceil(boxHeight / g);\n boxWidth = fgw * g;\n boxHeight = fgh * g;\n\n // Calculate the proper offsets to make the text centered at\n // the preferred position.\n\n // This is simply half of the width.\n var fillTextOffsetX = -fw / 2;\n // Instead of moving the box to the exact middle of the preferred\n // position, for Y-offset we move 0.4 instead, so Latin alphabets look\n // vertical centered.\n var fillTextOffsetY = -fh * 0.4;\n\n // Calculate the actual dimension of the canvas, considering the rotation.\n var cgh = Math.ceil(\n (boxWidth * Math.abs(Math.sin(rotateDeg)) +\n boxHeight * Math.abs(Math.cos(rotateDeg))) /\n g\n );\n var cgw = Math.ceil(\n (boxWidth * Math.abs(Math.cos(rotateDeg)) +\n boxHeight * Math.abs(Math.sin(rotateDeg))) /\n g\n );\n var width = cgw * g;\n var height = cgh * g;\n\n fcanvas.setAttribute('width', width);\n fcanvas.setAttribute('height', height);\n\n if (debug) {\n // Attach fcanvas to the DOM\n document.body.appendChild(fcanvas);\n // Save it's state so that we could restore and draw the grid correctly.\n fctx.save();\n }\n\n // Scale the canvas with |mu|.\n fctx.scale(1 / mu, 1 / mu);\n fctx.translate((width * mu) / 2, (height * mu) / 2);\n fctx.rotate(-rotateDeg);\n\n // Once the width/height is set, ctx info will be reset.\n // Set it again here.\n fctx.font =\n fontWeight +\n ' ' +\n (fontSize * mu).toString(10) +\n 'px ' +\n settings.fontFamily;\n\n // Fill the text into the fcanvas.\n // XXX: We cannot because textBaseline = 'top' here because\n // Firefox and Chrome uses different default line-height for canvas.\n // Please read https://bugzil.la/737852#c6.\n // Here, we use textBaseline = 'middle' and draw the text at exactly\n // 0.5 * fontSize lower.\n fctx.fillStyle = '#000';\n fctx.textBaseline = 'middle';\n fctx.fillText(\n word,\n fillTextOffsetX * mu,\n (fillTextOffsetY + fontSize * 0.5) * mu\n );\n\n // Get the pixels of the text\n var imageData = fctx.getImageData(0, 0, width, height).data;\n\n if (exceedTime()) {\n return false;\n }\n\n if (debug) {\n // Draw the box of the original estimation\n fctx.strokeRect(fillTextOffsetX * mu, fillTextOffsetY, fw * mu, fh * mu);\n fctx.restore();\n }\n\n // Read the pixels and save the information to the occupied array\n var occupied = [];\n var gx = cgw;\n var gy, x, y;\n var bounds = [cgh / 2, cgw / 2, cgh / 2, cgw / 2];\n while (gx--) {\n gy = cgh;\n while (gy--) {\n y = g;\n /* eslint no-labels: ['error', { 'allowLoop': true }] */\n singleGridLoop: while (y--) {\n x = g;\n while (x--) {\n if (imageData[((gy * g + y) * width + (gx * g + x)) * 4 + 3]) {\n occupied.push([gx, gy]);\n\n if (gx < bounds[3]) {\n bounds[3] = gx;\n }\n if (gx > bounds[1]) {\n bounds[1] = gx;\n }\n if (gy < bounds[0]) {\n bounds[0] = gy;\n }\n if (gy > bounds[2]) {\n bounds[2] = gy;\n }\n\n if (debug) {\n fctx.fillStyle = 'rgba(255, 0, 0, 0.5)';\n fctx.fillRect(gx * g, gy * g, g - 0.5, g - 0.5);\n }\n break singleGridLoop;\n }\n }\n }\n if (debug) {\n fctx.fillStyle = 'rgba(0, 0, 255, 0.5)';\n fctx.fillRect(gx * g, gy * g, g - 0.5, g - 0.5);\n }\n }\n }\n\n if (debug) {\n fctx.fillStyle = 'rgba(0, 255, 0, 0.5)';\n fctx.fillRect(\n bounds[3] * g,\n bounds[0] * g,\n (bounds[1] - bounds[3] + 1) * g,\n (bounds[2] - bounds[0] + 1) * g\n );\n }\n\n // Return information needed to create the text on the real canvas\n return {\n mu: mu,\n occupied: occupied,\n bounds: bounds,\n gw: cgw,\n gh: cgh,\n fillTextOffsetX: fillTextOffsetX,\n fillTextOffsetY: fillTextOffsetY,\n fillTextWidth: fw,\n fillTextHeight: fh,\n fontSize: fontSize\n };\n };\n\n /* Determine if there is room available in the given dimension */\n var canFitText = function canFitText(gx, gy, gw, gh, occupied) {\n // Go through the occupied points,\n // return false if the space is not available.\n var i = occupied.length;\n while (i--) {\n var px = gx + occupied[i][0];\n var py = gy + occupied[i][1];\n\n if (px >= ngx || py >= ngy || px < 0 || py < 0) {\n if (!settings.drawOutOfBound) {\n return false;\n }\n continue;\n }\n\n if (!grid[px][py]) {\n return false;\n }\n }\n return true;\n };\n\n /* Actually draw the text on the grid */\n var drawText = function drawText(\n gx,\n gy,\n info,\n word,\n weight,\n distance,\n theta,\n rotateDeg,\n attributes,\n extraDataArray\n ) {\n var fontSize = info.fontSize;\n var color;\n if (getTextColor) {\n color = getTextColor(\n word,\n weight,\n fontSize,\n distance,\n theta,\n extraDataArray\n );\n } else {\n color = settings.color;\n }\n\n // get fontWeight that will be used to set ctx.font and font style rule\n var fontWeight;\n if (getTextFontWeight) {\n fontWeight = getTextFontWeight(word, weight, fontSize, extraDataArray);\n } else {\n fontWeight = settings.fontWeight;\n }\n\n var classes;\n if (getTextClasses) {\n classes = getTextClasses(word, weight, fontSize, extraDataArray);\n } else {\n classes = settings.classes;\n }\n\n elements.forEach(function (el) {\n if (el.getContext) {\n var ctx = el.getContext('2d');\n var mu = info.mu;\n\n // Save the current state before messing it\n ctx.save();\n ctx.scale(1 / mu, 1 / mu);\n\n ctx.font =\n fontWeight +\n ' ' +\n (fontSize * mu).toString(10) +\n 'px ' +\n settings.fontFamily;\n ctx.fillStyle = color;\n\n // Translate the canvas position to the origin coordinate of where\n // the text should be put.\n ctx.translate((gx + info.gw / 2) * g * mu, (gy + info.gh / 2) * g * mu);\n\n if (rotateDeg !== 0) {\n ctx.rotate(-rotateDeg);\n }\n\n // Finally, fill the text.\n\n // XXX: We cannot because textBaseline = 'top' here because\n // Firefox and Chrome uses different default line-height for canvas.\n // Please read https://bugzil.la/737852#c6.\n // Here, we use textBaseline = 'middle' and draw the text at exactly\n // 0.5 * fontSize lower.\n ctx.textBaseline = 'middle';\n ctx.fillText(\n word,\n info.fillTextOffsetX * mu,\n (info.fillTextOffsetY + fontSize * 0.5) * mu\n );\n\n // The below box is always matches how s are positioned\n /* ctx.strokeRect(info.fillTextOffsetX, info.fillTextOffsetY,\n info.fillTextWidth, info.fillTextHeight); */\n\n // Restore the state.\n ctx.restore();\n } else {\n // drawText on DIV element\n var span = document.createElement('span');\n var transformRule = '';\n transformRule = 'rotate(' + (-rotateDeg / Math.PI) * 180 + 'deg) ';\n if (info.mu !== 1) {\n transformRule +=\n 'translateX(-' +\n info.fillTextWidth / 4 +\n 'px) ' +\n 'scale(' +\n 1 / info.mu +\n ')';\n }\n var styleRules = {\n position: 'absolute',\n display: 'block',\n font:\n fontWeight + ' ' + fontSize * info.mu + 'px ' + settings.fontFamily,\n left: (gx + info.gw / 2) * g + info.fillTextOffsetX + 'px',\n top: (gy + info.gh / 2) * g + info.fillTextOffsetY + 'px',\n width: info.fillTextWidth + 'px',\n height: info.fillTextHeight + 'px',\n lineHeight: fontSize + 'px',\n whiteSpace: 'nowrap',\n transform: transformRule,\n webkitTransform: transformRule,\n msTransform: transformRule,\n transformOrigin: '50% 40%',\n webkitTransformOrigin: '50% 40%',\n msTransformOrigin: '50% 40%'\n };\n if (color) {\n styleRules.color = color;\n }\n span.textContent = word;\n for (var cssProp in styleRules) {\n span.style[cssProp] = styleRules[cssProp];\n }\n if (attributes) {\n for (var attribute in attributes) {\n span.setAttribute(attribute, attributes[attribute]);\n }\n }\n if (classes) {\n span.className += classes;\n }\n el.appendChild(span);\n }\n });\n };\n\n /* Help function to updateGrid */\n var fillGridAt = function fillGridAt(x, y, drawMask, dimension, item) {\n if (x >= ngx || y >= ngy || x < 0 || y < 0) {\n return;\n }\n\n grid[x][y] = false;\n\n if (drawMask) {\n var ctx = elements[0].getContext('2d');\n ctx.fillRect(x * g, y * g, maskRectWidth, maskRectWidth);\n }\n\n if (interactive) {\n infoGrid[x][y] = { item: item, dimension: dimension };\n }\n };\n\n /* Update the filling information of the given space with occupied points.\n Draw the mask on the canvas if necessary. */\n var updateGrid = function updateGrid(gx, gy, gw, gh, info, item) {\n var occupied = info.occupied;\n var drawMask = settings.drawMask;\n var ctx;\n if (drawMask) {\n ctx = elements[0].getContext('2d');\n ctx.save();\n ctx.fillStyle = settings.maskColor;\n }\n\n var dimension;\n if (interactive) {\n var bounds = info.bounds;\n dimension = {\n x: (gx + bounds[3]) * g,\n y: (gy + bounds[0]) * g,\n w: (bounds[1] - bounds[3] + 1) * g,\n h: (bounds[2] - bounds[0] + 1) * g\n };\n }\n\n var i = occupied.length;\n while (i--) {\n var px = gx + occupied[i][0];\n var py = gy + occupied[i][1];\n\n if (px >= ngx || py >= ngy || px < 0 || py < 0) {\n continue;\n }\n\n fillGridAt(px, py, drawMask, dimension, item);\n }\n\n if (drawMask) {\n ctx.restore();\n }\n };\n\n /* putWord() processes each item on the list,\n calculate it's size and determine it's position, and actually\n put it on the canvas. */\n var putWord = function putWord(item, loopIndex) {\n if (loopIndex > 20) {\n return null;\n }\n\n var word, weight, attributes;\n if (Array.isArray(item)) {\n word = item[0];\n weight = item[1];\n } else {\n word = item.word;\n weight = item.weight;\n attributes = item.attributes;\n }\n var rotateDeg = getRotateDeg();\n\n var extraDataArray = getItemExtraData(item);\n\n // get info needed to put the text onto the canvas\n var info = getTextInfo(word, weight, rotateDeg, extraDataArray);\n\n // not getting the info means we shouldn't be drawing this one.\n if (!info) {\n return false;\n }\n\n if (exceedTime()) {\n return false;\n }\n\n // If drawOutOfBound is set to false,\n // skip the loop if we have already know the bounding box of\n // word is larger than the canvas.\n if (!settings.drawOutOfBound && !settings.shrinkToFit) {\n var bounds = info.bounds;\n if (bounds[1] - bounds[3] + 1 > ngx || bounds[2] - bounds[0] + 1 > ngy) {\n return false;\n }\n }\n\n // Determine the position to put the text by\n // start looking for the nearest points\n var r = maxRadius + 1;\n\n var tryToPutWordAtPoint = function (gxy) {\n var gx = Math.floor(gxy[0] - info.gw / 2);\n var gy = Math.floor(gxy[1] - info.gh / 2);\n var gw = info.gw;\n var gh = info.gh;\n\n // If we cannot fit the text at this position, return false\n // and go to the next position.\n if (!canFitText(gx, gy, gw, gh, info.occupied)) {\n return false;\n }\n\n // Actually put the text on the canvas\n drawText(\n gx,\n gy,\n info,\n word,\n weight,\n maxRadius - r,\n gxy[2],\n rotateDeg,\n attributes,\n extraDataArray\n );\n\n // Mark the spaces on the grid as filled\n updateGrid(gx, gy, gw, gh, info, item);\n\n return {\n gx: gx,\n gy: gy,\n rot: rotateDeg,\n info: info\n };\n };\n\n while (r--) {\n var points = getPointsAtRadius(maxRadius - r);\n\n if (settings.shuffle) {\n points = [].concat(points);\n shuffleArray(points);\n }\n\n // Try to fit the words by looking at each point.\n // array.some() will stop and return true\n // when putWordAtPoint() returns true.\n for (var i = 0; i < points.length; i++) {\n var res = tryToPutWordAtPoint(points[i]);\n if (res) {\n return res;\n }\n }\n\n // var drawn = points.some(tryToPutWordAtPoint);\n // if (drawn) {\n // // leave putWord() and return true\n // return true;\n // }\n }\n\n if (settings.shrinkToFit) {\n if (Array.isArray(item)) {\n item[1] = (item[1] * 3) / 4;\n } else {\n item.weight = (item.weight * 3) / 4;\n }\n return putWord(item, loopIndex + 1);\n }\n\n // we tried all distances but text won't fit, return null\n return null;\n };\n\n /* Send DOM event to all elements. Will stop sending event and return\n if the previous one is canceled (for cancelable events). */\n var sendEvent = function sendEvent(type, cancelable, details) {\n if (cancelable) {\n return !elements.some(function (el) {\n var event = new CustomEvent(type, {\n detail: details || {}\n });\n return !el.dispatchEvent(event);\n }, this);\n } else {\n elements.forEach(function (el) {\n var event = new CustomEvent(type, {\n detail: details || {}\n });\n el.dispatchEvent(event);\n }, this);\n }\n };\n\n /* Start drawing on a canvas */\n var start = function start() {\n // For dimensions, clearCanvas etc.,\n // we only care about the first element.\n var canvas = elements[0];\n\n if (canvas.getContext) {\n ngx = Math.ceil(canvas.width / g);\n ngy = Math.ceil(canvas.height / g);\n } else {\n var rect = canvas.getBoundingClientRect();\n ngx = Math.ceil(rect.width / g);\n ngy = Math.ceil(rect.height / g);\n }\n\n // Sending a wordcloudstart event which cause the previous loop to stop.\n // Do nothing if the event is canceled.\n if (!sendEvent('wordcloudstart', true)) {\n return;\n }\n\n // Determine the center of the word cloud\n center = settings.origin\n ? [settings.origin[0] / g, settings.origin[1] / g]\n : [ngx / 2, ngy / 2];\n\n // Maxium radius to look for space\n maxRadius = Math.floor(Math.sqrt(ngx * ngx + ngy * ngy));\n\n /* Clear the canvas only if the clearCanvas is set,\n if not, update the grid to the current canvas state */\n grid = [];\n\n var gx, gy, i;\n if (!canvas.getContext || settings.clearCanvas) {\n elements.forEach(function (el) {\n if (el.getContext) {\n var ctx = el.getContext('2d');\n ctx.fillStyle = settings.backgroundColor;\n ctx.clearRect(0, 0, ngx * (g + 1), ngy * (g + 1));\n ctx.fillRect(0, 0, ngx * (g + 1), ngy * (g + 1));\n } else {\n el.textContent = '';\n el.style.backgroundColor = settings.backgroundColor;\n el.style.position = 'relative';\n }\n });\n\n /* fill the grid with empty state */\n gx = ngx;\n while (gx--) {\n grid[gx] = [];\n gy = ngy;\n while (gy--) {\n grid[gx][gy] = true;\n }\n }\n } else {\n /* Determine bgPixel by creating\n another canvas and fill the specified background color. */\n var bctx = document.createElement('canvas').getContext('2d');\n\n bctx.fillStyle = settings.backgroundColor;\n bctx.fillRect(0, 0, 1, 1);\n var bgPixel = bctx.getImageData(0, 0, 1, 1).data;\n\n /* Read back the pixels of the canvas we got to tell which part of the\n canvas is empty.\n (no clearCanvas only works with a canvas, not divs) */\n var imageData = canvas\n .getContext('2d')\n .getImageData(0, 0, ngx * g, ngy * g).data;\n\n gx = ngx;\n var x, y;\n while (gx--) {\n grid[gx] = [];\n gy = ngy;\n while (gy--) {\n y = g;\n /* eslint no-labels: ['error', { 'allowLoop': true }] */\n singleGridLoop: while (y--) {\n x = g;\n while (x--) {\n i = 4;\n while (i--) {\n if (\n imageData[((gy * g + y) * ngx * g + (gx * g + x)) * 4 + i] !==\n bgPixel[i]\n ) {\n grid[gx][gy] = false;\n break singleGridLoop;\n }\n }\n }\n }\n if (grid[gx][gy] !== false) {\n grid[gx][gy] = true;\n }\n }\n }\n\n imageData = bctx = bgPixel = undefined;\n }\n\n // fill the infoGrid with empty state if we need it\n if (settings.hover || settings.click) {\n interactive = true;\n\n /* fill the grid with empty state */\n gx = ngx + 1;\n while (gx--) {\n infoGrid[gx] = [];\n }\n\n if (settings.hover) {\n canvas.addEventListener('mousemove', wordcloudhover);\n }\n\n if (settings.click) {\n canvas.addEventListener('click', wordcloudclick);\n canvas.addEventListener('touchstart', wordcloudclick);\n canvas.addEventListener('touchend', function (e) {\n e.preventDefault();\n });\n canvas.style.webkitTapHighlightColor = 'rgba(0, 0, 0, 0)';\n }\n\n canvas.addEventListener('wordcloudstart', function stopInteraction() {\n canvas.removeEventListener('wordcloudstart', stopInteraction);\n\n canvas.removeEventListener('mousemove', wordcloudhover);\n canvas.removeEventListener('click', wordcloudclick);\n hovered = undefined;\n });\n }\n\n i = 0;\n var loopingFunction, stoppingFunction;\n var layouting = true;\n if (!settings.layoutAnimation) {\n loopingFunction = function (cb) {\n cb();\n };\n stoppingFunction = function () {\n layouting = false;\n };\n } else if (settings.wait !== 0) {\n loopingFunction = window.setTimeout;\n stoppingFunction = window.clearTimeout;\n } else {\n loopingFunction = window.setImmediate;\n stoppingFunction = window.clearImmediate;\n }\n\n var addEventListener = function addEventListener(type, listener) {\n elements.forEach(function (el) {\n el.addEventListener(type, listener);\n }, this);\n };\n\n var removeEventListener = function removeEventListener(type, listener) {\n elements.forEach(function (el) {\n el.removeEventListener(type, listener);\n }, this);\n };\n\n var anotherWordCloudStart = function anotherWordCloudStart() {\n removeEventListener('wordcloudstart', anotherWordCloudStart);\n stoppingFunction(timer[timerId]);\n };\n\n addEventListener('wordcloudstart', anotherWordCloudStart);\n\n // At least wait the following code before call the first iteration.\n timer[timerId] = (settings.layoutAnimation ? loopingFunction : setTimeout)(\n function loop() {\n if (!layouting) {\n return;\n }\n if (i >= settings.list.length) {\n stoppingFunction(timer[timerId]);\n sendEvent('wordcloudstop', false);\n removeEventListener('wordcloudstart', anotherWordCloudStart);\n delete timer[timerId];\n return;\n }\n escapeTime = new Date().getTime();\n var drawn = putWord(settings.list[i], 0);\n var canceled = !sendEvent('wordclouddrawn', true, {\n item: settings.list[i],\n drawn: drawn\n });\n if (exceedTime() || canceled) {\n stoppingFunction(timer[timerId]);\n settings.abort();\n sendEvent('wordcloudabort', false);\n sendEvent('wordcloudstop', false);\n removeEventListener('wordcloudstart', anotherWordCloudStart);\n return;\n }\n i++;\n timer[timerId] = loopingFunction(loop, settings.wait);\n },\n settings.wait\n );\n };\n\n // All set, start the drawing\n start();\n};\n\nWordCloud.isSupported = isSupported;\nWordCloud.minFontSize = minFontSize;\n\nexport default WordCloud;\n","import * as echarts from 'echarts/lib/echarts';\n\nimport './WordCloudSeries';\nimport './WordCloudView';\n\nimport wordCloudLayoutHelper from './layout';\n\nif (!wordCloudLayoutHelper.isSupported) {\n throw new Error('Sorry your browser not support wordCloud');\n}\n\n// https://github.com/timdream/wordcloud2.js/blob/c236bee60436e048949f9becc4f0f67bd832dc5c/index.js#L233\nfunction updateCanvasMask(maskCanvas) {\n var ctx = maskCanvas.getContext('2d');\n var imageData = ctx.getImageData(0, 0, maskCanvas.width, maskCanvas.height);\n var newImageData = ctx.createImageData(imageData);\n\n var toneSum = 0;\n var toneCnt = 0;\n for (var i = 0; i < imageData.data.length; i += 4) {\n var alpha = imageData.data[i + 3];\n if (alpha > 128) {\n var tone =\n imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2];\n toneSum += tone;\n ++toneCnt;\n }\n }\n var threshold = toneSum / toneCnt;\n\n for (var i = 0; i < imageData.data.length; i += 4) {\n var tone =\n imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2];\n var alpha = imageData.data[i + 3];\n\n if (alpha < 128 || tone > threshold) {\n // Area not to draw\n newImageData.data[i] = 0;\n newImageData.data[i + 1] = 0;\n newImageData.data[i + 2] = 0;\n newImageData.data[i + 3] = 0;\n } else {\n // Area to draw\n // The color must be same with backgroundColor\n newImageData.data[i] = 255;\n newImageData.data[i + 1] = 255;\n newImageData.data[i + 2] = 255;\n newImageData.data[i + 3] = 255;\n }\n }\n\n ctx.putImageData(newImageData, 0, 0);\n}\n\necharts.registerLayout(function (ecModel, api) {\n ecModel.eachSeriesByType('wordCloud', function (seriesModel) {\n var gridRect = echarts.helper.getLayoutRect(\n seriesModel.getBoxLayoutParams(),\n {\n width: api.getWidth(),\n height: api.getHeight()\n }\n );\n\n var keepAspect = seriesModel.get('keepAspect');\n var maskImage = seriesModel.get('maskImage');\n var ratio = maskImage ? maskImage.width / maskImage.height : 1;\n keepAspect && adjustRectAspect(gridRect, ratio);\n\n var data = seriesModel.getData();\n\n var canvas = document.createElement('canvas');\n canvas.width = gridRect.width;\n canvas.height = gridRect.height;\n\n var ctx = canvas.getContext('2d');\n if (maskImage) {\n try {\n ctx.drawImage(maskImage, 0, 0, canvas.width, canvas.height);\n updateCanvasMask(canvas);\n } catch (e) {\n console.error('Invalid mask image');\n console.error(e.toString());\n }\n }\n\n var sizeRange = seriesModel.get('sizeRange');\n var rotationRange = seriesModel.get('rotationRange');\n var valueExtent = data.getDataExtent('value');\n\n var DEGREE_TO_RAD = Math.PI / 180;\n var gridSize = seriesModel.get('gridSize');\n wordCloudLayoutHelper(canvas, {\n list: data\n .mapArray('value', function (value, idx) {\n var itemModel = data.getItemModel(idx);\n return [\n data.getName(idx),\n itemModel.get('textStyle.fontSize', true) ||\n echarts.number.linearMap(value, valueExtent, sizeRange),\n idx\n ];\n })\n .sort(function (a, b) {\n // Sort from large to small in case there is no more room for more words\n return b[1] - a[1];\n }),\n fontFamily:\n seriesModel.get('textStyle.fontFamily') ||\n seriesModel.get('emphasis.textStyle.fontFamily') ||\n ecModel.get('textStyle.fontFamily'),\n fontWeight:\n seriesModel.get('textStyle.fontWeight') ||\n seriesModel.get('emphasis.textStyle.fontWeight') ||\n ecModel.get('textStyle.fontWeight'),\n\n gridSize: gridSize,\n\n ellipticity: gridRect.height / gridRect.width,\n\n minRotation: rotationRange[0] * DEGREE_TO_RAD,\n maxRotation: rotationRange[1] * DEGREE_TO_RAD,\n\n clearCanvas: !maskImage,\n\n rotateRatio: 1,\n\n rotationStep: seriesModel.get('rotationStep') * DEGREE_TO_RAD,\n\n drawOutOfBound: seriesModel.get('drawOutOfBound'),\n shrinkToFit: seriesModel.get('shrinkToFit'),\n\n layoutAnimation: seriesModel.get('layoutAnimation'),\n\n shuffle: false,\n\n shape: seriesModel.get('shape')\n });\n\n function onWordCloudDrawn(e) {\n var item = e.detail.item;\n if (e.detail.drawn && seriesModel.layoutInstance.ondraw) {\n e.detail.drawn.gx += gridRect.x / gridSize;\n e.detail.drawn.gy += gridRect.y / gridSize;\n seriesModel.layoutInstance.ondraw(\n item[0],\n item[1],\n item[2],\n e.detail.drawn\n );\n }\n }\n\n canvas.addEventListener('wordclouddrawn', onWordCloudDrawn);\n\n if (seriesModel.layoutInstance) {\n // Dispose previous\n seriesModel.layoutInstance.dispose();\n }\n\n seriesModel.layoutInstance = {\n ondraw: null,\n\n dispose: function () {\n canvas.removeEventListener('wordclouddrawn', onWordCloudDrawn);\n // Abort\n canvas.addEventListener('wordclouddrawn', function (e) {\n // Prevent default to cancle the event and stop the loop\n e.preventDefault();\n });\n }\n };\n });\n});\n\necharts.registerPreprocessor(function (option) {\n var series = (option || {}).series;\n !echarts.util.isArray(series) && (series = series ? [series] : []);\n\n var compats = ['shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\n\n echarts.util.each(series, function (seriesItem) {\n if (seriesItem && seriesItem.type === 'wordCloud') {\n var textStyle = seriesItem.textStyle || {};\n\n compatTextStyle(textStyle.normal);\n compatTextStyle(textStyle.emphasis);\n }\n });\n\n function compatTextStyle(textStyle) {\n textStyle &&\n echarts.util.each(compats, function (key) {\n if (textStyle.hasOwnProperty(key)) {\n textStyle['text' + echarts.format.capitalFirst(key)] = textStyle[key];\n }\n });\n }\n});\n\nfunction adjustRectAspect(gridRect, aspect) {\n // var outerWidth = gridRect.width + gridRect.x * 2;\n // var outerHeight = gridRect.height + gridRect.y * 2;\n var width = gridRect.width;\n var height = gridRect.height;\n if (width > height * aspect) {\n gridRect.x += (width - height * aspect) / 2;\n gridRect.width = height * aspect;\n } else {\n gridRect.y += (height - width / aspect) / 2;\n gridRect.height = width / aspect;\n }\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__83__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(638);\n","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};"],"sourceRoot":""}