{"version":3,"sources":["unknown"],"names":["global","factory","exports","module","require","define","amd","self","dataTool","echarts","arrayProto","Array","prototype","nativeSlice","slice","nativeMap","map","ctorFunction","constructor","protoFunction","arr","cb","context","result","i","len","length","push","call","bindPolyfill","func","args","_i","arguments","apply","concat","bind","isFunction","value","parse","xml","doc","parser","DOMParser","parseFromString","getElementsByTagName","gexfRoot","getChildByTagName","graphRoot","attributes","parseAttributes","attributesMap","id","nodes","parseNodes","links","parseEdges","parent","getChildrenByTagName","attribDom","getAttr","title","type","nodeDom","label","node","name","itemStyle","normal","vizSizeDom","vizPosDom","vizColorDom","attvaluesDom","symbolSize","parseFloat","x","y","color","join","attvalueDomList","j","attvalueDom","attId","attValue","attribute","parseInt","toLowerCase","edgeDom","sourceId","targetId","edge","source","target","lineStyle","vizThicknessDom","width","getAttribute","el","attrName","tagName","firstChild","nodeType","nodeName","nextSibling","children","gexf","Object","freeze","__proto__","asc","sort","a","b","quantile","ascArr","p","H","h","Math","floor","v","e","prepareBoxplotData","rawData","opt","boxData","outliers","axisData","boundIQR","useExtreme","ascList","Q1","Q2","Q3","min","max","bound","low","high","dataItem","outlier","layout","reverse","version","defineProperty"],"mappings":"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","sourcesContent":["(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('echarts')) :\n    typeof define === 'function' && define.amd ? define(['exports', 'echarts'], factory) :\n    (global = global || self, factory(global.dataTool = {}, global.echarts));\n}(this, (function (exports, echarts) { 'use strict';\n\n    var arrayProto = Array.prototype;\r\n    var nativeSlice = arrayProto.slice;\r\n    var nativeMap = arrayProto.map;\r\n    var ctorFunction = (function () { }).constructor;\r\n    var protoFunction = ctorFunction ? ctorFunction.prototype : null;\r\n    function map(arr, cb, context) {\r\n        if (!arr) {\r\n            return [];\r\n        }\r\n        if (!cb) {\r\n            return slice(arr);\r\n        }\r\n        if (arr.map && arr.map === nativeMap) {\r\n            return arr.map(cb, context);\r\n        }\r\n        else {\r\n            var result = [];\r\n            for (var i = 0, len = arr.length; i < len; i++) {\r\n                result.push(cb.call(context, arr[i], i, arr));\r\n            }\r\n            return result;\r\n        }\r\n    }\r\n    function bindPolyfill(func, context) {\r\n        var args = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            args[_i - 2] = arguments[_i];\r\n        }\r\n        return function () {\r\n            return func.apply(context, args.concat(nativeSlice.call(arguments)));\r\n        };\r\n    }\r\n    var bind = (protoFunction && isFunction(protoFunction.bind))\r\n        ? protoFunction.call.bind(protoFunction.bind)\r\n        : bindPolyfill;\r\n    function isFunction(value) {\r\n        return typeof value === 'function';\r\n    }\r\n    function slice(arr) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        return nativeSlice.apply(arr, args);\r\n    }\n\n    function parse(xml) {\r\n        var doc;\r\n        if (typeof xml === 'string') {\r\n            var parser = new DOMParser();\r\n            doc = parser.parseFromString(xml, 'text/xml');\r\n        }\r\n        else {\r\n            doc = xml;\r\n        }\r\n        if (!doc || doc.getElementsByTagName('parsererror').length) {\r\n            return null;\r\n        }\r\n        var gexfRoot = getChildByTagName(doc, 'gexf');\r\n        if (!gexfRoot) {\r\n            return null;\r\n        }\r\n        var graphRoot = getChildByTagName(gexfRoot, 'graph');\r\n        var attributes = parseAttributes(getChildByTagName(graphRoot, 'attributes'));\r\n        var attributesMap = {};\r\n        for (var i = 0; i < attributes.length; i++) {\r\n            attributesMap[attributes[i].id] = attributes[i];\r\n        }\r\n        return {\r\n            nodes: parseNodes(getChildByTagName(graphRoot, 'nodes'), attributesMap),\r\n            links: parseEdges(getChildByTagName(graphRoot, 'edges'))\r\n        };\r\n    }\r\n    function parseAttributes(parent) {\r\n        return parent ? map(getChildrenByTagName(parent, 'attribute'), function (attribDom) {\r\n            return {\r\n                id: getAttr(attribDom, 'id'),\r\n                title: getAttr(attribDom, 'title'),\r\n                type: getAttr(attribDom, 'type')\r\n            };\r\n        }) : [];\r\n    }\r\n    function parseNodes(parent, attributesMap) {\r\n        return parent ? map(getChildrenByTagName(parent, 'node'), function (nodeDom) {\r\n            var id = getAttr(nodeDom, 'id');\r\n            var label = getAttr(nodeDom, 'label');\r\n            var node = {\r\n                id: id,\r\n                name: label,\r\n                itemStyle: {\r\n                    normal: {}\r\n                }\r\n            };\r\n            var vizSizeDom = getChildByTagName(nodeDom, 'viz:size');\r\n            var vizPosDom = getChildByTagName(nodeDom, 'viz:position');\r\n            var vizColorDom = getChildByTagName(nodeDom, 'viz:color');\r\n            var attvaluesDom = getChildByTagName(nodeDom, 'attvalues');\r\n            if (vizSizeDom) {\r\n                node.symbolSize = parseFloat(getAttr(vizSizeDom, 'value'));\r\n            }\r\n            if (vizPosDom) {\r\n                node.x = parseFloat(getAttr(vizPosDom, 'x'));\r\n                node.y = parseFloat(getAttr(vizPosDom, 'y'));\r\n            }\r\n            if (vizColorDom) {\r\n                node.itemStyle.normal.color = 'rgb(' + [\r\n                    getAttr(vizColorDom, 'r') | 0,\r\n                    getAttr(vizColorDom, 'g') | 0,\r\n                    getAttr(vizColorDom, 'b') | 0\r\n                ].join(',') + ')';\r\n            }\r\n            if (attvaluesDom) {\r\n                var attvalueDomList = getChildrenByTagName(attvaluesDom, 'attvalue');\r\n                node.attributes = {};\r\n                for (var j = 0; j < attvalueDomList.length; j++) {\r\n                    var attvalueDom = attvalueDomList[j];\r\n                    var attId = getAttr(attvalueDom, 'for');\r\n                    var attValue = getAttr(attvalueDom, 'value');\r\n                    var attribute = attributesMap[attId];\r\n                    if (attribute) {\r\n                        switch (attribute.type) {\r\n                            case 'integer':\r\n                            case 'long':\r\n                                attValue = parseInt(attValue, 10);\r\n                                break;\r\n                            case 'float':\r\n                            case 'double':\r\n                                attValue = parseFloat(attValue);\r\n                                break;\r\n                            case 'boolean':\r\n                                attValue = attValue.toLowerCase() === 'true';\r\n                                break;\r\n                        }\r\n                        node.attributes[attId] = attValue;\r\n                    }\r\n                }\r\n            }\r\n            return node;\r\n        }) : [];\r\n    }\r\n    function parseEdges(parent) {\r\n        return parent ? map(getChildrenByTagName(parent, 'edge'), function (edgeDom) {\r\n            var id = getAttr(edgeDom, 'id');\r\n            var label = getAttr(edgeDom, 'label');\r\n            var sourceId = getAttr(edgeDom, 'source');\r\n            var targetId = getAttr(edgeDom, 'target');\r\n            var edge = {\r\n                id: id,\r\n                name: label,\r\n                source: sourceId,\r\n                target: targetId,\r\n                lineStyle: {\r\n                    normal: {}\r\n                }\r\n            };\r\n            var lineStyle = edge.lineStyle.normal;\r\n            var vizThicknessDom = getChildByTagName(edgeDom, 'viz:thickness');\r\n            var vizColorDom = getChildByTagName(edgeDom, 'viz:color');\r\n            if (vizThicknessDom) {\r\n                lineStyle.width = parseFloat(vizThicknessDom.getAttribute('value'));\r\n            }\r\n            if (vizColorDom) {\r\n                lineStyle.color = 'rgb(' + [\r\n                    getAttr(vizColorDom, 'r') | 0,\r\n                    getAttr(vizColorDom, 'g') | 0,\r\n                    getAttr(vizColorDom, 'b') | 0\r\n                ].join(',') + ')';\r\n            }\r\n            return edge;\r\n        }) : [];\r\n    }\r\n    function getAttr(el, attrName) {\r\n        return el.getAttribute(attrName);\r\n    }\r\n    function getChildByTagName(parent, tagName) {\r\n        var node = parent.firstChild;\r\n        while (node) {\r\n            if (node.nodeType !== 1\r\n                || node.nodeName.toLowerCase() !== tagName.toLowerCase()) {\r\n                node = node.nextSibling;\r\n            }\r\n            else {\r\n                return node;\r\n            }\r\n        }\r\n        return null;\r\n    }\r\n    function getChildrenByTagName(parent, tagName) {\r\n        var node = parent.firstChild;\r\n        var children = [];\r\n        while (node) {\r\n            if (node.nodeName.toLowerCase() === tagName.toLowerCase()) {\r\n                children.push(node);\r\n            }\r\n            node = node.nextSibling;\r\n        }\r\n        return children;\r\n    }\n\n    var gexf = /*#__PURE__*/Object.freeze({\n        __proto__: null,\n        parse: parse\n    });\n\n    function asc(arr) {\r\n        arr.sort(function (a, b) {\r\n            return a - b;\r\n        });\r\n        return arr;\r\n    }\r\n    function quantile(ascArr, p) {\r\n        var H = (ascArr.length - 1) * p + 1;\r\n        var h = Math.floor(H);\r\n        var v = +ascArr[h - 1];\r\n        var e = H - h;\r\n        return e ? v + e * (ascArr[h] - v) : v;\r\n    }\r\n    function prepareBoxplotData (rawData, opt) {\r\n        opt = opt || {};\r\n        var boxData = [];\r\n        var outliers = [];\r\n        var axisData = [];\r\n        var boundIQR = opt.boundIQR;\r\n        var useExtreme = boundIQR === 'none' || boundIQR === 0;\r\n        for (var i = 0; i < rawData.length; i++) {\r\n            axisData.push(i + '');\r\n            var ascList = asc(rawData[i].slice());\r\n            var Q1 = quantile(ascList, 0.25);\r\n            var Q2 = quantile(ascList, 0.5);\r\n            var Q3 = quantile(ascList, 0.75);\r\n            var min = ascList[0];\r\n            var max = ascList[ascList.length - 1];\r\n            var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);\r\n            var low = useExtreme\r\n                ? min\r\n                : Math.max(min, Q1 - bound);\r\n            var high = useExtreme\r\n                ? max\r\n                : Math.min(max, Q3 + bound);\r\n            boxData.push([low, Q1, Q2, Q3, high]);\r\n            for (var j = 0; j < ascList.length; j++) {\r\n                var dataItem = ascList[j];\r\n                if (dataItem < low || dataItem > high) {\r\n                    var outlier = [i, dataItem];\r\n                    opt.layout === 'vertical' && outlier.reverse();\r\n                    outliers.push(outlier);\r\n                }\r\n            }\r\n        }\r\n        return {\r\n            boxData: boxData,\r\n            outliers: outliers,\r\n            axisData: axisData\r\n        };\r\n    }\n\n    var version = '1.0.0';\r\n    if (echarts.dataTool) {\r\n        echarts.dataTool.version = version;\r\n        echarts.dataTool.gexf = gexf;\r\n        echarts.dataTool.prepareBoxplotData = prepareBoxplotData;\r\n    }\n\n    exports.gexf = gexf;\n    exports.prepareBoxplotData = prepareBoxplotData;\n    exports.version = version;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n\n"]}