/*
title: NPM Dependencies with graphGL
category: graphGL
theme: dark
titleCN: 1w 节点 2w7 边的NPM 依赖图
shotDelay: 5000
shotWidth: 1920
*/

function loadScript(scriptUrl, cb) {
    var scriptTag = document.createElement('script');
    scriptTag.onload = cb;
    scriptTag.src = scriptUrl;
    document.body.appendChild(scriptTag);
}

loadScript('https://cdn.jsdelivr.net/npm/echarts-graph-modularity@2.0.0/dist/echarts-graph-modularity.min.js', function () {
    // Reinit chart again
    // TODO: visual encoding registerion must been done before echarts.init.
    var dom = myChart.getDom();
    myChart.dispose();
    myChart = echarts.init(dom);
    $.getJSON(ROOT_PATH + '/data-gl/asset/data/npmdep.json', function (data) {
        var nodes = data.nodes.map(function (nodeName, idx) {
            return {
                name: nodeName,
                value: data.dependentsCount[idx]
            }
        });
        var edges = [];
        for (var i = 0; i < data.edges.length;) {
            var s = data.edges[i++];
            var t = data.edges[i++];
            edges.push({
                source: s,
                target: t
            });
        }

        nodes.forEach(function (node) {
            // if (node.value > 100) {
                node.emphasis = {
                    label: {
                        show: true
                    }
                }
            // }
            if (node.value > 5000) {
                node.label = {
                    show: true
                }
            }
        });

        myChart.setOption({
            backgroundColor: '#000',
            series: [{
                color: ['rgb(203,239,15)', 'rgb(73,15,239)','rgb(15,217,239)','rgb(30,15,239)','rgb(15,174,239)','rgb(116,239,15)','rgb(239,15,58)','rgb(15,239,174)','rgb(239,102,15)','rgb(239,15,15)','rgb(15,44,239)','rgb(239,145,15)','rgb(30,239,15)','rgb(239,188,15)','rgb(159,239,15)','rgb(159,15,239)','rgb(15,239,44)','rgb(15,239,87)','rgb(15,239,217)','rgb(203,15,239)','rgb(239,15,188)','rgb(239,15,102)','rgb(239,58,15)','rgb(239,15,145)','rgb(116,15,239)','rgb(15,131,239)','rgb(73,239,15)','rgb(15,239,131)','rgb(15,87,239)','rgb(239,15,231)'],
                type: 'graphGL',
                nodes: nodes,
                edges: edges,
                modularity: {
                    resolution: 2,
                    sort: true
                },
                lineStyle: {
                    color: 'rgba(255,255,255,1)',
                    opacity: 0.05
                },
                itemStyle: {
                    opacity: 1
                    // borderColor: '#fff',
                    // borderWidth: 1
                },
                focusNodeAdjacency: false,
                focusNodeAdjacencyOn: 'click',
                symbolSize: function (value) {
                    return Math.sqrt(value / 10);
                },
                label: {
                    color: '#fff'
                },
                emphasis: {
                    label: {
                        show: false
                    },
                    lineStyle: {
                        opacity: 0.5,
                        width: 4
                    }
                },
                forceAtlas2: {
                    steps: 5,
                    stopThreshold: 20,
                    jitterTolerence: 10,
                    edgeWeight: [0.2, 1],
                    gravity: 5,
                    edgeWeightInfluence: 0
                    // preventOverlap: true
                }
            }]
        });
    });
});
