Index: arms/js/analysisScope.js =================================================================== diff -u -reda746afe4b804d938e8b284df26754675cd18c1 -r395d57373d9ebc13e59a7ef1c1b65872c311ceaf --- arms/js/analysisScope.js (.../analysisScope.js) (revision eda746afe4b804d938e8b284df26754675cd18c1) +++ arms/js/analysisScope.js (.../analysisScope.js) (revision 395d57373d9ebc13e59a7ef1c1b65872c311ceaf) @@ -49,8 +49,10 @@ "../reference/jquery-plugins/d3-sankey-v0.12.3/d3-sankey.min.js" ], [ - // d3 network chart + // d3-7.8.2 network chart "../reference/jquery-plugins/d3-7.8.2/dist/d3.min.js", + // d3-5.16.0 + // "../reference/jquery-plugins/d3-5.16.0/d3.min.js", // 생성한 차트 import "js/analysis/topmenu/basicRadar.js", "js/analysis/topmenu/topMenu.js", @@ -614,12 +616,13 @@ /******** network graph config ********/ var networkGraph = { createGraph: function () { - var links = NETWORK_DATA.links.map(function (d) { + let links = NETWORK_DATA.links.map(function (d) { return Object.create(d); }); - var nodes = NETWORK_DATA.nodes.map(function (d) { + let nodes = NETWORK_DATA.nodes.map(function (d) { return Object.create(d); }); + var fillCircle = function (g) { if (g.type === "pdService") { return "#c67cff"; @@ -635,7 +638,7 @@ }; var typeBinding = function (g) { - var name = ""; + let name = ""; if (g.type === "pdService") { name = "제품(서비스)"; @@ -651,7 +654,7 @@ }; var nameBinding = function (g) { - var name = ""; + let name = ""; if (g.type === "pdService") { return g.c_title; @@ -662,43 +665,63 @@ } }; - var width = 500; - var height = 500; + let baseWidth = 400; + let baseHeight = 400; + let nodeCount = nodes.length; - var simulation = d3 - .forceSimulation(nodes) - .force( - "link", - d3 - .forceLink(links) - .id(function (d) { - return d.id; - }) - .distance(80) - ) - .force("charge", d3.forceManyBody().strength(-800)) - .force("center", d3.forceCenter(width / 2, height / 2)); - // .force("collide",d3.forceCollide().radius( function(d){ return d.value*8}) ); + let increaseFactor = Math.floor(nodeCount / 100); + if (nodeCount % 100 !== 0) { + increaseFactor++; + } + baseWidth += increaseFactor * 100; + baseHeight += increaseFactor * 100; - //simulation.stop(); // stop 필요한가? + let width = baseWidth; + let height = baseHeight; - var svg = d3.select("#NETWORK_GRAPH").attr("viewBox", [0, 0, width, height]); + let initScale = 1; - var initScale; - - if (NETWORK_DATA.nodes.length > 200) { - initScale = 0.2; - } else if (NETWORK_DATA.nodes.length > 90) { - initScale = 0.4; - } else { - initScale = 1; + if (increaseFactor !== 0) { + initScale = initScale / increaseFactor; } - var initialTransform = d3.zoomIdentity + let simulation = d3 + .forceSimulation(nodes) + .force("link", + d3.forceLink(links) + .id(function (d) { return d.id; }) + .distance(30) + ) + .force("charge", d3.forceManyBody().strength(-1000)) + .force("center", d3.forceCenter(width / 3, height / 3)) + .force("collide", d3.forceCollide().radius(20)) + .force("radial", d3.forceRadial() + .radius(10) + .x(width / 3) + .y(height / 3) + .strength(0.5) + ); + //.force("center", d3.forceCenter(width / 3, height / 3)); + // .force("collide", d3.forceCollide() + // .radius(function(node) { + // var linkCount = countLinks(node, links ); + // return 5 * linkCount; + // }) + // ); + // .force("collide",d3.forceCollide().radius( function(d){ + // console.log(d); + // return 20; + // })); + + //simulation.stop(); + + let svg = d3.select("#NETWORK_GRAPH").attr("viewBox", [0, 0, width, height]); + + let initialTransform = d3.zoomIdentity .translate(width / 3, height / 3) // 초기 위치 설정 .scale(initScale); // 초기 줌 레벨 설정 - var zoom = d3 + let zoom = d3 .zoom() .scaleExtent([0.1, 5]) // 줌 가능한 최소/최대 줌 레벨 설정 .on("zoom", zoomed); // 줌 이벤트 핸들러 설정 @@ -709,9 +732,9 @@ // 초기 줌 설정 svg.transition().duration(500).call(zoom.transform, initialTransform); - var gHolder = svg.append("g").attr("class", "g-holder"); + let gHolder = svg.append("g").attr("class", "g-holder"); - var link = gHolder + let link = gHolder .append("g") .attr("fill", "none") .attr("stroke", "gray") @@ -735,7 +758,7 @@ .text(function(d){ return d.id }) .style("font-size", "12px") */ - var node = gHolder + let node = gHolder .append("g") .attr("class", "circle-node-holder") .attr("stroke", "white") @@ -806,9 +829,12 @@ }); }); + // d3-5.16.0 + // function zoomed() { + // let transform = d3.event.transform; function zoomed(event) { // 현재 확대/축소 변환을 얻음 - var transform = event.transform; + let transform = event.transform; // 모든 노드 및 링크를 현재 확대/축소 변환으로 이동/확대/축소 gHolder.attr("transform", transform); @@ -819,6 +845,24 @@ return svg.node(); }, drag: function (simulation) { + // d3-5.16.0 + // function dragstarted(d) { + // if (!d3.event.active) simulation.alphaTarget(0.3).restart(); + // d.fx = d.x; + // d.fy = d.y; + // } + // + // function dragged(d) { + // d.fx = d3.event.x; + // d.fy = d3.event.y; + // } + // + // function dragended(d) { + // if (!d3.event.active) simulation.alphaTarget(0); + // d.fx = null; + // d.fy = null; + // } + function dragstarted(event, d) { if (!event.active) simulation.alphaTarget(0.3).restart(); d.fx = d.x; Index: arms/js/analysisTime.js =================================================================== diff -u -r4d92048b5273b5818c54538f129ec0db342d8a36 -r395d57373d9ebc13e59a7ef1c1b65872c311ceaf --- arms/js/analysisTime.js (.../analysisTime.js) (revision 4d92048b5273b5818c54538f129ec0db342d8a36) +++ arms/js/analysisTime.js (.../analysisTime.js) (revision 395d57373d9ebc13e59a7ef1c1b65872c311ceaf) @@ -36,6 +36,8 @@ "../reference/jquery-plugins/echarts-5.4.3/dist/echarts.min.js", // 게이지 차트 "../reference/jquery-plugins/d3-7.8.2/dist/d3.min.js", + // "../reference/jquery-plugins/d3-v4.13.0/d3.v4.min.js", + // "../reference/jquery-plugins/d3-5.16.0/d3.min.js", // heatmap "../reference/jquery-plugins/github-calendar-heatmap/js/calendar_yearview_blocks.js", "../reference/jquery-plugins/github-calendar-heatmap/css/calendar_yearview_blocks.css", @@ -131,9 +133,9 @@ statusCode: { 200: function (data) { ////////////////////////////////////////////////////////// - for (var k in data.response) { - var obj = data.response[k]; - var newOption = new Option(obj.c_title, obj.c_id, false, false); + for (let k in data.response) { + let obj = data.response[k]; + let newOption = new Option(obj.c_title, obj.c_id, false, false); $("#selected_pdService").append(newOption).trigger("change"); } } @@ -152,8 +154,8 @@ //~> 이벤트 연계 함수 :: Version 표시 jsTree 빌드 bind_VersionData_By_PdService(); - var checked = $("#checkbox1").is(":checked"); - var endPointUrl = ""; + let checked = $("#checkbox1").is(":checked"); + let endPointUrl = ""; // if (checked) { // endPointUrl = "/T_ARMS_REQSTATUS_" + $("#selected_pdService").val() + "/getStatusMonitor.do?disable=true"; @@ -183,11 +185,11 @@ return obj; }, {}); - var pdServiceVersionIds = []; - for (var k in data.response) { - var obj = data.response[k]; + let pdServiceVersionIds = []; + for (let k in data.response) { + let obj = data.response[k]; pdServiceVersionIds.push(obj.c_id); - var newOption = new Option(obj.c_title, obj.c_id, true, false); + let newOption = new Option(obj.c_title, obj.c_id, true, false); $(".multiple-select").append(newOption); } @@ -239,9 +241,9 @@ onClose: function () { console.log("[ analysisTime :: makeVersionMultiSelectBox ] :: onOpen event fire!\n"); - var checked = $("#checkbox1").is(":checked"); - var endPointUrl = ""; - var versionTag = $(".multiple-select").val(); + let checked = $("#checkbox1").is(":checked"); + let endPointUrl = ""; + let versionTag = $(".multiple-select").val(); if (versionTag === null || versionTag == "") { alert("버전이 선택되지 않았습니다."); @@ -294,6 +296,13 @@ }); } +async function formatDateAsync(date) { + var year = date.getFullYear(); + var month = (date.getMonth() + 1).toString().padStart(2, "0"); + var day = date.getDate().toString().padStart(2, "0"); + return year + "-" + month + "-" + day; +} + function formatDate(date) { var year = date.getFullYear(); var month = (date.getMonth() + 1).toString().padStart(2, "0"); @@ -408,7 +417,7 @@ //////////////////// // 두번째 박스 //////////////////// -function drawVersionProgress(data) { +async function drawVersionProgress(data) { var Needle, arc, arcEndRad, @@ -523,7 +532,9 @@ } } } - deadline = formatDate(new Date(latestEndDate)); + + deadline = await formatDateAsync(new Date(latestEndDate)); + $("#fastestStartDate").text(new Date(fastestStartDate).toLocaleDateString()); $("#latestEndDate").text(new Date(latestEndDate).toLocaleDateString());